# 把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")