python生成器 yeild關鍵字

2021-07-16 09:07:35 字數 1338 閱讀 6088

1.yeild版本的斐波那契數列

def fab(max): 

n, a, b = 0, 0, 1

while n < max:

yield b

# print b

a, b = b, a + b

n = n + 1

'''

第四個版本的 fab 和第一版相比,僅僅把 print b 改為了 yield b,就在保持簡潔性的同時獲得了 iterable 的效果。

呼叫第四版的 fab 和第二版的 fab 完全一致:

>>> for n in fab(5): 

... print n

...

1 1

2 3

5

簡單地講,yield 的作用就是把乙個函式變成乙個 generator,帶有 yield 的函式不再是乙個普通函式,python 直譯器會將其視為乙個 generator,呼叫 fab(5) 不會執行 fab 函式,而是返回乙個 iterable 物件!在 for 迴圈執行時,每次迴圈都會執行 fab 函式內部的**,執行到 yield b 時,fab 函式就返回乙個迭代值,下次迭代時,**從 yield b 的下一條語句繼續執行,而函式的本地變數看起來和上次中斷執行前是完全一樣的,於是函式繼續執行,直到再次遇到 yield。

也可以手動呼叫 fab(5) 的 next() 方法(因為 fab(5) 是乙個 generator 物件,該物件具有 next() 方法),這樣我們就可以更清楚地看到 fab 的執行

2迭代器版本的

class fab(object): 

def __init__(self, max):

self.max = max

self.n, self.a, self.b = 0, 0, 1

def __iter__(self):

return self

def next(self):

if self.n < self.max:

r = self.b

self.a, self.b = self.b, self.a + self.b

self.n = self.n + 1

return r

raise stopiteration()

fab 類通過 next() 不斷返回數列的下乙個數,記憶體占用始終為常數:

>>> for n in fab(5): 

... print n

...

1 1

2 3

5

python之生成器yeild

思考 首先思考這樣乙個問題 建立乙個列表,但是記憶體受限,容量一定是有限的。那麼如果建立了乙個包含100萬個元素的列表,不僅占用很大的儲存空間,而我們僅僅需要訪問前面幾個元素,那後面絕大多數元素占用的空間都白白浪費了?這個時候就需要乙個容器,在我們需要資料的時候拿出來,不取資料的時候就釋放掉。這樣就...

python 生成器作用 Python生成器

生成器介紹 在函式內部包含yield關鍵字,那麼該函式執行的結果是生成器,生成器就是迭代器。生成器的功能 把函式結果做成迭代器 以一種優雅的方式封裝好iter,next 提供了一種自己定義迭代器的方式。使用生成器建立乙個迭代器 def a print a yield 11 使用yield,執行後返回...

python生成器好處 Python生成器筆記

python中三大器有迭代器,生成器,裝飾器,本文主要講述生成器。主要從生成器的概念,本質,以及yield關鍵字的使用執行過程。本質 生成器是一類特殊的迭代器,使用了yield關鍵字的函式不再是函式,而是生成器。使用了yield的函式就是生成器 1.yield關鍵字有兩點作用 1.1 yield語句...