Python學習雜記
阿新 • • 發佈:2017-06-03
方便 存在 叠代 [] word ams lang com func
Python中關鍵字yield有什麽作用?
首先得理解generators,而理解generators前還要理解iterables:
你可以用在for...in...
語句中的都是可叠代的:比如lists,strings,files...因為這些可叠代的對象你可以隨意的讀取所以非常方便易用,但是你必須把它們的值放到內存裏,當它們有很多值時就會消耗太多的內存。
生成器也是叠代器的一種,但是你只能叠代它們一次.原因很簡單,因為它們不是全部存在內存裏,它們只在要調用的時候在內存裏生成。
note:生成器和叠代器的區別就是用()
代替[]
,還有你不能用for i in mygenerator
第二次調用生成器。
Yield
的用法和關鍵字return
差不多:
>>> def createGenerator():
... mylist = range(3)
... for i in mylist:
... yield i*i ...
>>> mygenerator = createGenerator() # 創建生成器
>>> print(mygenerator) # mygenerator is an object!
<generator object createGenerator at 0xb7555c34>
>>> for i in mygenerator:
... print(i)
0
1
4
當你的函數要返回一個非常大的集合並且你希望只讀一次的話,那麽它就非常的方便了.
要理解Yield
你必須先理解當你調用函數的時候,函數裏的代碼並沒有運行.函數僅僅返回生成器對象,這就是它最微妙的地方:-)
然後呢,每當for
語句叠代生成器的時候你的代碼才會運轉.
Python學習雜記