yield關鍵字有什麼作用

2021-09-23 07:33:23 字數 1383 閱讀 7576

所屬**分類: python基礎 > 語句

要了解yield它的作用,您必須了解生成器是什麼

建立列表時,您可以逐個取出元素。逐個讀取它的項稱為迭代。

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

>>> for i in mylist:

... print(i)12

3

當您使用列表推導時,您建立乙個列表,因此是乙個可迭代的:

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

>>> for i in mylist:

... print(i)01

4

在python中你可以使用的所有都是可迭代的; lists,strings,檔案...等等

這些迭代很方便,因為您可以根據需要讀取它們,但是您將所有值儲存在記憶體中,當您擁有大量值時,這並不總是您想要的。

生成器是迭代器,是一種只能迭代一次的迭代器。生成器不會將所有值儲存在記憶體中,它們會動態生成值:

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

>>> for i in mygenerator:

... print(i)01

4

它和迭代器產生的值是相同的,除了你用()而不是。但是,由於生成器只能使用一次,所以不能再執行for i in mygenerator:它們計算0,然後列印它並計算1,然後逐個計算4。

yield相當於return,但跟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)01

4

你的函式將返回一組你只需要使用一次的大量值時使用yield它會很方便。

要掌握yield,您必須明白,當您呼叫該函式時,您在函式體中編寫的**不會執行。該函式只返回生成器物件)

然後,您的**將從每次for使用生成器時停止的位置繼續。

第一次for呼叫從函式建立的生成器物件時,它將從開始執行函式中的**直到它遇到yield,然後它將返回迴圈的第乙個值。然後,每個其他呼叫將再次執行您在函式中寫入的迴圈,並返回下乙個值,直到沒有值返回。

函式不再被yield,這可能是因為迴圈已經結束,或者因為你不再滿足"if/else"了。

python的關鍵字yield有什麼作用

要理解yiled還需要理解生成器,而要理解生成器,首先需要理解迭代器。迭代器 所有你可以用在for.in.語句中的都是可迭代的 比如lists,strings,files.因為這些可迭代的物件你可以隨意的讀取所以非常方便易用,但是你必須把它們的值放到記憶體裡,當它們有很多值時就會消耗太多的記憶體.生...

Python筆記 關鍵字yield有什麼作用

要理解yiled還需要理解生成器,而要理解生成器,首先需要理解迭代器。迭代器 所有你可以用在for.in.語句中的都是可迭代的 比如lists,strings,files.因為這些可迭代的物件你可以隨意的讀取所以非常方便易用,但是你必須把它們的值放到記憶體裡,當它們有很多值時就會消耗太多的記憶體.生...

學習yield關鍵字

當使用yield關鍵字時,這就意味著該函式返回的是乙個迭代器 iterator 不用自己維護乙個迭代器內部的狀態管理 比如c 中的itereator,或實現c 中實現的介面iemuerator 其使用模式如下 yield return yield break 其中第二種用於for迴圈終止。這樣的模式...