Python yield使用方法示例

2022-10-05 00:21:18 字數 1536 閱讀 2763

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 本次使用清華源進行安裝 離線安裝第三方庫 一鍵安裝整個...