# 生成器函数
def fibo(n): # 普通函数
a, b = (0, 1)
for _ in range(n):
a, b = b, a + b
return a
def fibo1(n): # 生成器函数 保留上次计算的值 不会重复计算
a, b = (0, 1)
for _ in range(n):
a, b = b, a + b
yield a
print(fibo(10))
print('-------'*4)
print(fibo1(10))
结果如下图所示:
虚线上的一行的55代表普通函数计算的结果; 虚线下的是生成器函数的结果
程序会暂停在yield的地方, 等待下一次调用 next() 时, 程序又会执行一次, 然后继续执行;
通过打断点来进行理解, 让程序一步一步执行, 查看程序到底执行到了那里, 暂停到了哪里;【参考此处】
所以我们再来看这个例子
def gen_yield():
for i in range(10):
print('我只跑一次循环!')
yield i
print_yield = gen_yield()
print(next(print_yield)) # 0
print(next(print_yield)) # 1
它每次只跑一次循环,只有等再次调用next() 时, 程序才会再执行一次/