代码如下:
def fab(max):
n, a, b = 0, 0, 1
while n < max:
yield b
a, b = b, a + b
n = n + 1
print("print(fab(5)):",fab(5))
for n in fab(5):
print(n)
yield存在于函数中,就将函数变成了一个generator(生成器),调用 fab(5) 并不会直接运行 fab 函数,返回的是一个可迭代对象(如实验结果),每次迭代都会执行函数内部的代码,到“yield b”的时候就暂停执行,返回一个迭代值,下一轮迭代直接从“yield b”的下一句执行,直到再次碰见“yield b”。
也可以直接调用fab(5)的next方法,因为是一个generator对象,所以具有next方法:
def fab(max):
n, a, b = 0, 0, 1
while n < max:
yield b
a, b = b, a + b
n = n + 1
f = fab(5)
print(f.__next__())
print(f.__next__())
print(f.__next__())