當前位置:成語大全網 - 書法字典 - python中yield和return有什麽區別,如何使用?

python中yield和return有什麽區別,如何使用?

經常看到別人在使用或者討論yield語法,卻找不到很多中文解釋。今天我決心擺脫yield,把我暫時的理解貼在這裏。

屈服之前:叠代器

發現收益:建設者。

使用yield:遞歸調用

1.叠代程序

叠代器最簡單的例子應該是數組下標,看看下面的c++代碼:

int數組[10];

for(int I = 0;我& lt10;i++)

printf("%d ",array[I]);

叠代器在容器(array[10])中工作,它按照壹定的順序(i++)從容器中取值(array[i]),並對其進行操作(printf("%d ",array[i])。

上面的代碼被翻譯成python:

array = [i for i in range(10)]

對於數組中的I:

打印I,

for i in array做了什麽(別想了)?首先,array是壹個作為list的容器,其次,list的內置類型有默認的next行為。python在發現這些後采取的秘密行動是:取出array的容器叠代器,接下來把值給I,讓for循環的主體處理掉,for打印這個值。

現在的問題是,數據可以作為容器叠代,代碼可以嗎?

為什麽不呢?盤子可以用來放蔬菜。wk人不是和nt盛有關聯嗎?當然我們的收益率不會那麽黃+bt。

2.構造器

如何把函數變成構造函數?只是在函數體中有屈服!

def gen():

打印“輸入”

產量1

打印“下壹頁”

產量2

打印“再次下壹頁”

對於gen()中的I:

打印I

各位!Python在gen函數中看到了收益,並且知道它可以使用next。問題是接下來怎麽玩代碼容器?

當我從容器中得到叠代器時,它什麽也不是。它在容器的入口,對於數組是下標-1,對於函數是函數入口。我什麽都沒做,但壹切都準備好了,接下來就該我了。

從i in g開始,接下來讓itreator爬行到yield語句存在的地方,並返回值。

Next將再次攀升到下壹個yield語句所在的位置並返回值,依此類推,直到函數返回(容器的末尾)。

您必須看到上面代碼的輸出是:

進入

1

然後

2

下壹個

如果沒看到,請不要往下看,以免被yield照顧。

使用產量

Yield的代碼叠代能力不僅可以中斷函數執行,還可以記錄斷點處的數據,這正是下壹本書下次連接時遞歸函數所需要的。

例如,以中間順序遍歷二叉樹:

(應該是大衛·默茨寫的)

定義順序(t):

如果t:

對於有序排列的x(t . left):

產量x

產量t .標簽

對於按順序排列的x(t . right):

產量x

在有序(樹)中

印刷

當然yield的下壹步編碼能力也可以用在其他方面,發現憤怒的人在發帖。