Python-生成器
列表表达式中[]更换为(),即可成为生成器,只适用于数据量较小时;
g = (x * x for x in range(10))
普通函数中使用yield关键字,即可转化为生成器函数,但无法直接调用,可在for中使用。
def odd(): n=1 while True: yield n n+=2
odd_num = odd()
count = 0
for o in odd_num: if count >=5: break print(o) count +=1
yield与return的区别:遇到yield X时就返回迭代值X,下次调用时从yield X 的下一句开始执行。
在一个生成器中,如果没有return,则默认执行到函数完毕时返回StopIteration;
如果遇到return,如果在执行过程中 return,则直接抛出 StopIteration 终止迭代。
如果在return后返回一个值,那么这个值为StopIteration异常的说明,不是程序的返回值。
使用生成器函数对变量复制,变量为生成器的地址,普通函数对变量复制为调用函数后返回值