def fib():
prev, curr = 0, 1
while True:
yield curr
prev, curr = curr, curr + prev
fib就是一个普通的python函数,它特殊的地方在于函数体中没有return关键字,函数的返回值是一个生成器对象。当执行f=fib()返回的是一个生成器对象,此时函数体中的代码并不会执行,只有显示或隐示地调用next的时候才会真正执行里面的代码。
生成器表达式是列表推倒式的生成器版本,看起来像列表推导式,但是它返回的是一个生成器对象而不是列表对象。
a = (x*x for x in range(10))
a
<generator object at 0x401f08>sum(a)
285
任何你可用 “for… in…” 处理的都是可迭代对象:列表,字符串,文件… 这些迭代对象非常便捷,因为你可以尽可能多地获取你想要的东西
生成器是迭代器,但你只能遍历它一次(iterate over them once) 因为生成器并没有将所有值放入内存中,而是实时地生成这些值