def create_num(all_num):
print('---1---')
a, b = 0, 1
current_num = 0
while current_num < all_num:
print('---2---')
yy = yield a # 如果函数中 有yield 语句,那么就不再是函数了,而是一个生成器模板
print(yy)
print('---3---')
a, b = b, a + b
current_num += 1
obj = create_num(10) # 如果调用函数时,发现函数内有 yield 语句, 那么这个就不是函数,而是一个生成器
print(type(obj)) # <class 'generator'>
ret = next(obj) # 进行到yeild 停止运行
print(ret)
# 结果如下
# ---1---
# ---2---
# 0
ret = next(obj) # 然后从上次停止的地方运行
print(ret)
# 结果如下
# None # next 不可以对 yield a 的结果进行赋值
# ---3---
# ---2---
# 1
ret = obj.send('测试')
# send 可以对 yield a 的结果进行赋值
# (注释:第一次运行生成器时,假如用send方法会报错,因为没有地方存放值,可以把变量改为Nono,或者用next方法)
print(ret)
# 结果
# 测试
# ---3---
# ---2---
# 1