content: 1. 什麼是生成器 2. 生成器的實現 3. 生成器的應用 一.生成器簡介 1.什麼是生成器 在 Python 中,使用了 yield 的函數被稱為生成器(generator)。 跟普通函數不同的是,生成器是一個返回迭代器的函數,只能用於迭代操作,更簡單點理解生成器就是一個迭代器。 ...
content: 1. 什麼是生成器 2. 生成器的實現 3. 生成器的應用 一.生成器簡介 1.什麼是生成器 在 Python 中,使用了 yield 的函數被稱為生成器(generator)。 跟普通函數不同的是,生成器是一個返回迭代器的函數,只能用於迭代操作,更簡單點理解生成器就是一個迭代器。 在調用生成器運行的過程中,每次遇到 yield 時函數會暫停並保存當前所有的運行信息,返回 yield 的值, 併在下一次執行 next() 方法時從當前位置繼續運行。 調用一個生成器函數,返回的是一個迭代器對象。
#input def fib(x): if x<3: return 1 else: return fib(x-1)+fib(x-2) def fib2(x): n=0 last=1 sum=0 while n<x: yiled last sum,last=last,sum+last n=n+1 if __name__=="__main__": f=fib(6) print(f) f2=fib2(6) for i in f2: print(i) pass #output 8 1 1 2 3 5 8
二. 生成器的實現 生成器其實用起來還是比較簡單的,但是不理解原理的時候,用的時候是不是虛虛的。 1.python函數的工作原理 python解釋器實際上是用c來寫的。解釋器會用C實現的函數(PyEval_EvalFramEx)去執行函數。 這個 PyEval_EvalFramEx 首先會創建一個棧幀(Stack Frame)對象,就是那種記錄上下文的堆棧。註意python里一切皆對象哦。 然後會將代碼也變成位元組碼對象。查看一個函數的位元組碼:
#input def foo(): bar def bar(): pass import dis <