功能:可以按照某种算法推算,仅仅需要访问前面几个元素
运作机制:一边循环一边计算。保存的是算法
创建
把一个列表生成式的[ ]改成( )
eg
g = (x * x for x in range(10))
next()
每次调用next(g),就计算出g的下一个元素的值
获得generator的下一个返回值
用途:依次获取每一个元素
最后无元素,报错StopIteration
yield
如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator
斐波拉契数列
def fib(max):n, a, b = 0, 0, 1while n < max:print(b) #a, b = b, a + b # 注意等号连续赋值n = n + 1return 'done'
变成generator:print(b)改为yield b
def fib(max):n, a, b = 0, 0, 1while n < max:yield b #a, b = b, a + bn = n + 1return 'done'
执行流程
每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行
和函数不一样(遇到return语句或者最后一行函数语句就返回);
