生成器
生成器是python特有的一个语法,包含yield 关键字的函数,当他被调用的时候,函数体中的代码不会被执行,而是返回一个迭代器。每次请求一个值,就会执行生成器中的代码,直到遇到一个yield或return语句。yield意味着生成一个值。return语句意味着生成器停止执行。
下面是一个简单的生成器
nested = [[1,2],[3,4],[5]]
def flatten(nested):
for sublist in nested:
for element in sublist:
yield element
上述函数使用了双重循环,加上yield进行构造生成器的设置,yield 函数与return最大的区别在于,return语句返回一个值,而yield则是产生一个值,但是冻结他,函数停在那点等待被激活。函数被激活后从那一点开始执行。
下面是执行生成器来迭代所有的值
for num in flatten(nested):
print num
1
2
3
4
5
list(flatten(nested))
[1,2,3,4,5]
递归生成器
def flatten(nested):
try :
for sublist in nested:
for element in flatten(sublist):
yield element
excepet TypeError:
yield nested
其实生成器并非什么特殊的的魔法,他通过其他基本语句也能打到相同的目的,对于大多数生成器而言
yield some_expression
都·等价与
result.append(some_expression)