1. 程式人生 > >Python學習雜記

Python學習雜記

方便 存在 叠代 [] 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學習雜記