任何包含yield语句的函数称为生成器。
它的行为和普通的函数有很大的差别,它不是像return那样返回值,而是每次产生
多个值。每次产生一个值(使用yield语句),函数就会被冻结:即函数停在那点等待
被激活。函数被激活后就从停止的那点开始执行。
例子:
递归生成器:
它的行为和普通的函数有很大的差别,它不是像return那样返回值,而是每次产生
多个值。每次产生一个值(使用yield语句),函数就会被冻结:即函数停在那点等待
被激活。函数被激活后就从停止的那点开始执行。
例子:
def flatten(nested):
for sublist in nested:
for element in sublist:
yield element
nested = [[1,2], [3, 4], [5]]
print list(flatten(nested))
递归生成器:
# recursion yield example
def flatten2(nested):
try:
# Don't iteration of the string similar objects
try: nested + ''
except TypeError: pass
else: raise TypeError
for sublist in nested:
for element in flatten2(sublist):
yield element
except TypeError:
yield nested
print list(flatten2([[[1],2], 3, 4, [5, [6, 7]], 8]))
print list(flatten2(['foo', ['bar', ['baz']]]))