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)
當函數調用子函數,又會建立一個棧幀
全部的棧幀都是分配在堆的內存上,這就決定了棧幀能夠獨立調用者存在內存