Python-生成器函數(協程實現底層原理)-yield

yieldpython

  1. 函數執行的時候,找到yield關鍵字,則會標記這個函數,返回生成器對象程序員

  2. Python解釋器會記錄最近一次函數中yield位置函數

  3. 生成器對象也是分配在棧堆上ui

  4. 經過yield關鍵字,讓程序員主動控制函數的運行狀態,暫停函數還繼續運行spa

  5. 生成器能夠return值對象

def fib():
    """斐波那契數列生成器"""
    start, end = 1, 1
    hai = yield start
    print(hai)
    hai = yield end
    print(hai)
    while True:
        start, end = end, start + end
        hai = yield end
        print(hai)


if __name__ == '__main__':
    func = fib()
    one = func.send(None)
    two = func.send("beimenchuixue_1")
    three = func.send("beimenchuixue_2")
    four = func.send("beimenchuixue_3")
    print(one, two, three, four)

 

  

 函數運行原理blog

  Python解釋器是用C語言寫的,會用PyEvalFramEx(c函數)去執行咱們的函數,會首先建立一個棧幀(stack frame)three

  Python一切皆對象,棧幀對象,運行字節碼對象 import dis dis.dis(funcName)
  當函數調用子函數,又會建立一個棧幀
  全部的棧幀都是分配在堆的內存上,這就決定了棧幀能夠獨立調用者存在內存

相關文章
相關標籤/搜索