對python中yield關鍵字的認識及簡單介紹

2021-10-05 19:33:29 字數 1071 閱讀 6773

首先在理解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...