要理解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...