python的關鍵字yield有什麼作用

2021-07-12 02:00:12 字數 1027 閱讀 9430

要理解yiled還需要理解生成器,而要理解生成器,首先需要理解迭代器。

迭代器:

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

生成器:

生成器也是迭代器的一種,但是你只能迭代它們一次.原因很簡單,因為它們不是全部存在記憶體裡,它們只在要呼叫的時候在記憶體裡生成:

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

>>> for i in mygenerator:

... print(i)01

4

生成器和迭代器的區別就是用()代替,還有你不能用for i in mygenerator第二次呼叫生成器:首先計算0,然後會在記憶體裡丟掉0去計算1,直到計算完4.

yield的用法和關鍵字return差不多,下面的函式將會返回乙個生成器:

>>> def creategenerator():

... mylist = range(3)

... for i in mylist:

... yield i*i

...>>> mygenerator = creategenerator() # 建立生成器

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

>>> for i in mygenerator:

... print(i)01

4

要理解yield你必須先理解當你呼叫函式的時候,函式裡的**並沒有執行.函式僅僅返回生成器物件,這就是它最微妙的地方。

Python的yield關鍵字

忽然得知python有個叫yield的關鍵字,好奇之下去查了查,花了點時間基本弄明白了,故寫在此備忘,順便充充字數。yield關鍵字用來定義生成器 generator 其具體功能是可以當return使用,從函式裡返回乙個值,不同之處是用yield返回之後,可以讓函式從上回yield返回的地點繼續執行...

Python的yield關鍵字

忽然得知python有個叫yield的關鍵字,好奇之下去查了查,花了點時間基本弄明白了,故寫在此備忘,順便充充字數。yield關鍵字用來定義生成器 generator 其具體功能是可以當return使用,從函式裡返回乙個值,不同之處是用yield返回之後,可以讓函式從上回yield返回的地點繼續執行...

python中yield關鍵字

mylist是乙個可迭代的物件。當你使用乙個列表生成式來建立乙個列表的時候,就建立了乙個可迭代的物件 mylist x x for x in range 3 for i in mylist print i 01 4在這裡,所有的值都存在記憶體當中,所以並不適合大量資料 def creategener...