# 把a创建成了一个生成器对象 generator object
a = (x * 2 for x in range(10))
print(a)
print(next(a)) # 生成器对象调用用next(a),等价于 a.__next__(),生成器一次调用一个
print(next(a))
for i in a: # 生成器是一个可迭代对象
print(i)
# 创建生成器的第二种方式
def f():
print("第一次调用")
yield 1
print("第二次调用")
yield 2
# 也可以用next()方法调用生成器
for f in f():
print(f)
# 什么是可迭代对象:就是对象可以被__iter__()这种方式调用的都是可迭代对象
# 斐波拉切生成器
def fbo(f_max):
n, f_a, f_b = 0, 0, 1
while n < f_max:
# print(f_a)
yield f_a
f_a, f_b = f_b, f_a + f_b
n += 1
fbo = fbo(10)
for i in fbo:
print(i)
# 生成器中send()的应用
def f_send():
print("第一次调用")
ser = yield 1
print(ser)
print("第二次调用")
yield 2
# 使用send()第一次必须值为Nome,send可以在生成器yield前传参数,send是从程序执行上一个yield结束时开始执行
f_send = f_send()
f_send.send(None)
f_send.send("AAAAAA")