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

首先在理解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= 0  
2 ,  
i= 1  
4 ,  
i= 2  
6 ,  
i= 3  
8 ,  
i= 4  
do something.  
end. 

大致如此,通過使用yield構成的生成器,我們可以對代碼進行優化

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章