1. iterator
疊代器最簡單例子應該是陣列下標了,且看下面的c++**:
複製** **如下:
int array[10];
for ( int i = 0; i < 10; i++ )
printf("%d ", array[i]);
疊代器工作在乙個容器裡(array[10]),它按一定順序(i++)從容器裡取出值(array[i])並進行操作(printf("%d ", array[i])。
上面的**翻譯成python:
複製** **如下:
array = [i for i in range(10)]
for i in array:
print i,
首先,array作為乙個list是個容器,其次list這個內建型別有預設的next行為,python發現這些之後採取的秘密的沒被各位看到的動作是:拿出array這丫容器的疊代器,從裡面next一下把值給i供for迴圈主體處置,for把這個值print了。
現在的問題是資料可以做容器疊代,**可以嗎?
2. constructor
怎麼把函式變成constructor? 在函式體裡有yield就行了!
複製** **如下:
def gen():
print 'enter'
yield 1
print 'next'
&nb程式設計客棧sp; yield 2
程式設計客棧 print 'next again'
for i in gen():
print i
各位!python看到gen函式裡出現yiewww.cppcns.comld,知道可以用next了,問題是怎麼對**這個容器玩next?
從容器裡拿到iterator的時候它還什麼也不是,處在容器入口處,對於陣列來說就是下標為-1的地方,對於函式來說就是函式入口嘛事沒乾,但是萬事俱備就欠next。
開始for i in g,next讓itreator爬行到yield語句存在的地方並返回值,
再次next就再爬到下乙個yield語句存在的地方並返回值,依次這樣直到函式返回(容器盡頭)。
您一定看出來上面**的輸出是:
enter
1next
2next again
3. 使用yield
yield的**疊代能力不但能打斷函式執行還能記下斷點處的資料,下次next書接上回,
這正是遞迴函式需要的。
例如中序遍歷二叉樹:
(應該是d**id mertz寫的)
複製** 代www.cppcns.com碼如下:
def inorder(t):
if t:
for x in inorder(t.left):
yield x
yield t.label
for x in inorder(t.right):
yield x
for n in inorder(tr
print n
本文標題: python yield使用方法示例
本文位址:
Python yield使用方法示例
2.constructor 怎麼把函式變成constructor?在函式體裡有yield就行了!複製 如下 def gen print enter yield 1 print next yield 2 print next again for i in gen print i 各位!python看到...
Python yield 的使用方法
帶有 yield 的函式在 python 中被稱之為 generator 生成器 使用 yield 可以大大簡化 yield 返回的是乙個generator物件,帶有 yield 的函式不再是乙個普通函式 def fab max n,a,b 0,0,1 while n fab 5 yield 的作用...
pythonpip使用方法 pip使用方法整理
匯出專案已安裝的pip包 pip list 檢視專案中安裝的包 pip freeze requirements.txt 將專案中所用到的第三方庫輸出到requirements.txt中 pip install 版本號 pip install i 本次使用清華源進行安裝 離線安裝第三方庫 一鍵安裝整個...