首先在理解yield關鍵字之前,我們要學習一下關於迭代、迭代器和生成器的前置知識:
迭代而yield就是用來構成生成器的乙個關鍵字迭代器生成器
首先討論一下,通過列表生成式,我們可以直接建立乙個列表。但是,受到記憶體限制,列表容量肯定是有限的。而且,建立乙個包含100萬個元素的列表,不僅占用很大的儲存空間,如果我們僅僅需要訪問前面幾個元素,那後面絕大多數元素占用的空間都白白浪費了。
舉個例子,給出乙個題目,讓你給出斐波那契數列的第一百項,如果使用列表生成式,那麼我們需要建立乙個百萬級的列表來進行儲存,空間複雜度奇大,顯然是不可以被接受的。
所以,如果列表元素可以按照某種演算法推算出來,那我們是否可以在迴圈的過程中不斷推算出後續的元素呢?這樣就不必建立完整的list,從而節省大量的空間。在python中,這種一邊迴圈一邊計算的機制,稱為生成器:generator。
而yield的用處呢,就是將你定義的函式變為乙個生成器,即其返回的值是乙個生成器物件,下面給乙個簡單的例子
def
yield_test
(n):
for i in
range
(n):
yield call(i)
print
("i="
,i)#做一些其它的事情
print
("do something."
)print
("end."
)def
call
(i):
return i*
2#使用for迴圈
for i in yield_test(5)
:print
(i,","
)
0
, i=02
, i=14
, i=26
, i=38
, i=
4do something.
end.
大致如此,通過使用yield構成的生成器,我們可以對**進行優化 python中yield關鍵字
mylist是乙個可迭代的物件。當你使用乙個列表生成式來建立乙個列表的時候,就建立了乙個可迭代的物件 mylist x x for x in range 3 for i in mylist print i 01 4在這裡,所有的值都存在記憶體當中,所以並不適合大量資料 def creategener...
解析Python中的yield關鍵字
前言 python中有乙個非常有用的語法叫做生成器,所利用到的關鍵字就是yield。有效利用生成器這個工具可以有效地節約系統資源,避免不必要的記憶體占用。一段 def fun for i in range 20 x yield i print good x if name main a fun a....
解析Python中的yield關鍵字
python中有乙個非常有用的語法叫做生成器,所利用到的關鍵字就是yield。有效利用生成器這個工具可以有效地節約系統資源,避免不必要的記憶體占用。def fun for i in range 20 x yield i print good x if name main a fun a.next x...