所屬**分類: python基礎 > 語句
要了解yield它的作用,您必須了解生成器是什麼
建立列表時,您可以逐個取出元素。逐個讀取它的項稱為迭代。
>>> mylist = [1, 2, 3]當您使用列表推導時,您建立乙個列表,因此是乙個可迭代的:>>> for i in mylist:
... print(i)12
3
>>> mylist = [x*x for x in range(3)]在python中你可以使用的所有都是可迭代的; lists,strings,檔案...等等>>> for i in mylist:
... print(i)01
4
這些迭代很方便,因為您可以根據需要讀取它們,但是您將所有值儲存在記憶體中,當您擁有大量值時,這並不總是您想要的。
生成器是迭代器,是一種只能迭代一次的迭代器。生成器不會將所有值儲存在記憶體中,它們會動態生成值:
>>> mygenerator = (x*x for x in range(3))它和迭代器產生的值是相同的,除了你用()而不是。但是,由於生成器只能使用一次,所以不能再執行for i in mygenerator:它們計算0,然後列印它並計算1,然後逐個計算4。>>> for i in mygenerator:
... print(i)01
4
yield相當於return,但跟return又有所不同
>>> def creategenerator():你的函式將返回一組你只需要使用一次的大量值時使用yield它會很方便。... 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,您必須明白,當您呼叫該函式時,您在函式體中編寫的**不會執行。該函式只返回生成器物件)
然後,您的**將從每次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迴圈終止。這樣的模式...