python专门为for关键字做了迭代器的语法糖。在for循环中,Python将自动调用工厂函数iter()获得迭代器,自动调用next()获取元素,还完成了检查StopIteration异常的工作
包含yield语句的函数会被特地编译成生成器
生成器函数在生成值后会自动挂起并暂停他们的执行和状态,他的本地变量将保存状态信息,这些信息在函数恢复时将再度有效
def g(n):
for i in range(n):
yield i **2
t = g(5) 生成器
t.next() 0
t.next() 1
t.next() 4
for i in g(5):
print i,":",
0 : 1 : 4 : 9 : 16 :
带有 yield 的函数不再是一个普通函数,而是一个生成器generator,可用于迭代
yield 是一个类似 return 的关键字,迭代一次遇到yield时就返回yield后面的值。重点是:下一次迭代时,从上一次迭代遇到的yield后面的代码开始执行。