天天看點

python關鍵詞及其作用_Python裡Yield關鍵詞的作用

要了解yield的作用,您必須了解生成器是什麼。在了解生成器之前,必須先了解疊代器。

疊代器

當您建立一個清單時,您可以逐個讀取它的項。逐項讀取其項稱為疊代:

>>> mylist = [1, 2, 3]

>>> for i in mylist:

... print(i)

1

2

3

mylist是一個可疊代的對象。當你使用清單解析式時,你建立了一個清單,是以也是一個疊代器:

>>> mylist = [x*x for x in range(3)]

>>> for i in mylist:

... print(i)

1

4

所有你可以用"for... in ...."都是疊代器,包括清單、字元串、檔案…等等。

這些疊代器非常友善,因為您可以随心所欲地讀取它們,但是您将所有的值都存儲在記憶體中,當您有很多值時,這就非常浪費記憶體了。

生成器

生成器是疊代器,這種疊代器隻能疊代一次。生成器不會将所有值都存儲在記憶體中,它們會動态生成這些值:

>>> mygenerator = (x*x for x in range(3))

>>> for i in mygenerator:

... print(i)

1

4

它和清單解析式是類似的,隻是用()代替了[]。但是,您不能在mygenerator中對i執行第二次,因為生成器隻能使用一次:它print(0),然後忘記它,print(1),最後是4。

Yield

yield是一個與return類似的關鍵字,隻是函數将傳回一個生成器。

>>> def createGenerator():

... mylist = range(3)

... for i in mylist:

... yield i*i

...

>>> mygenerator = createGenerator() # create a generator

>>> print(mygenerator) # mygenerator is an object!

>>> for i in mygenerator:

... print(i)

1

4

您需要知道的是函數将傳回一組隻需要讀取一次的值,将這個特性了解清楚,用對地方将極大地提高性能,下次我們将介紹在什麼時候該用它。

要掌握yield,您必須了解,在調用函數時,在函數體中編寫的代碼不會運作。函數隻傳回生成器對象,這有點棘手:-)

然後,您的代碼将從每次使用生成器時停止的地方繼續。

現在是最難的部分:

for函數第一次調用從函數建立的生成器對象時,它将從頭運作函數中的代碼,直到達到yield,然後傳回循環的第一個值。然後,彼此調用将再次運作您在函數中編寫的循環,并傳回下一個值,直到沒有要傳回的值為止,就如我們上面的例子所示。

我們的文章到此就結束啦,如果你希望我們今天的Python 教程,請持續關注我們,如果對你有幫助,麻煩在下面點一個贊/在看哦,有任何問題都可以在下方留言區留言,我們都會耐心解答的!

​Python實用寶典 (pythondict.com)

不隻是一個寶典

歡迎關注公衆号:Python實用寶典 原文來自Python實用寶典:Python Yield關鍵詞的作用

python關鍵詞及其作用_Python裡Yield關鍵詞的作用