1. 程式人生 > >18 11 20 網路通訊 ----多工---- 攜程 ----生成器

18 11 20 網路通訊 ----多工---- 攜程 ----生成器

---恢復內容開始---

在一個函式裡面  只要有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()

由於呼叫一個  每次只調用一個函式  所以攜程 佔用的資源最少