18 11 20 網路通訊 ----多工---- 攜程 ----生成器
阿新 • • 發佈:2018-11-22
---恢復內容開始---
在一個函式裡面 只要有yield 就是一個生成器 舉一個例子 下面的是列印一個菲薄那數列
def creat_num (all_numbers): a, b = 0, 1 current_num = 0 while current_num <= all_numbers: current_num += 1 print(a) a , b = b ,a+b list1 = creat_num(10)
當把 print 改換成 yield的時候 就是一個生成器
生成器 兩個功能 next 和 send
def creat_nmber (all_nubmers): a ,b = 0, 1 current_number = 0 while current_number < all_nubmers: ret = yield a print ("======>",ret) a, b = b ,a+b current_number += 1 obj = creat_nmber(10) ret = next(obj) #預設從yield開始執行 想要一個生成一個 print(ret) ret = obj.send("hahhaah") # 傳送東西給yield後面的引數 可用來更改後面引數的值 並且繼續執行一次 print(ret)
輸出結果為
0
======> hahhaah
1
根據 yield 方法構造出了一個 多工---- 攜程---生成器
def text1 (): while True: print(1) yield def text2 (): while True: print(2)yield def main(): while True: next(text1()) next(text2()) if __name__ == '__main__': main()
由於呼叫一個 每次只調用一個函式 所以攜程 佔用的資源最少