要理解yiled還需要理解生成器,而要理解生成器,首先需要理解迭代器。
迭代器:
所有你可以用在for...in...
語句中的都是可迭代的:比如lists,strings,files...因為這些可迭代的物件你可以隨意的讀取所以非常方便易用,但是你必須把它們的值放到記憶體裡,當它們有很多值時就會消耗太多的記憶體.
生成器:
生成器也是迭代器的一種,但是你只能迭代它們一次.原因很簡單,因為它們不是全部存在記憶體裡,它們只在要呼叫的時候在記憶體裡生成:
[python]
view plain
copy
>>> mygenerator = (x*x
forx
inrange(
3))
>>> for
i in
mygenerator:
(i) 01
4 生成器和迭代器的區別就是用()
代替,還有你不能用
for i in mygenerator
第二次呼叫生成器:首先計算0,然後會在記憶體裡丟掉0去計算1,直到計算完4.
yield
的用法和關鍵字return
差不多,下面的函式將會返回乙個生成器:
[python]
view plain
copy
>>>
defcreategenerator():
... mylist = range(3
) ... for
i in
mylist:
... yield
i*i
...
>>> mygenerator = creategenerator() # 建立生成器
(mygenerator)
# mygenerator is an object!
0xb7555c34
>
>>> for
i in
mygenerator:
(i) 01
4 要理解yield
你必須先理解當你呼叫函式的時候,函式裡的**並沒有執行.函式僅僅返回生成器物件,這就是它最微妙的地方。
python學習筆記 關鍵字
python 3中的關鍵字 幾個關鍵字的解釋 true 類似於c 裡面的bool真。false 類似於c 裡面的bool假。and 邏輯運算子,和c 相同的是都是同真為真,但是不同的是,python中返回型別不是bool型別,而是當結果為真時邏輯運算的最後乙個真值,否則返回邏輯運算的第乙個假值。or...
this關鍵字筆記
1.問題提出 需求 在實際程式設計中,我們可能有這樣的需求,當我們建立乙個物件後,就希望該物件自動的擁有某些屬性 例如,我們建立了乙個person物件,就希望該物件自動擁有name和age屬性 function person var p1 new person window.alert p1.nam...
new關鍵字 this關鍵字 base關鍵字
使用new,所做的三件事 1.類是引用物件,引用物件是在堆中開闢空間 在堆中開闢空間 2.在開闢的堆空間中建立物件 3.呼叫物件的構建函式 4.隱藏父類成員 子類的成員可以與隱藏從父類繼承的成員,類似於重寫。public new void sayhello this關鍵字的使用 1.代表當前類的物件...