溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

python中yield關(guān)鍵字怎么理解?

發(fā)布時間:2020-08-06 08:11:02 來源:網(wǎng)絡(luò) 閱讀:660 作者:luckky 欄目:編程語言

本文簡短翻譯自鏈接 StackOverflow。
在理解yield之前,你必須先知道iterable(迭代器)和generator(生成器)。

iterable

當(dāng)你創(chuàng)建一個list,你能一個接一個讀取list的每一項(xiàng)。能一個接一個讀取每一項(xiàng)的就是迭代器。

>>> mylist = [1, 2, 3]
>>> for i in mylist:
...    print(i)
1
2
3

mylist是一個iterable,當(dāng)你用列表推導(dǎo)式生成一個列表,也是iterable

>>> mylist = [x*x for x in range(3)]
>>> for i in mylist:
...    print(i)
0
1
4

一切能用for.......in.......的都是迭代器,例如lists,strings,files。。。

generator

generator是一種只能迭代一次的iterable。生成器不會再內(nèi)存中儲存值,它只會在程序運(yùn)行的時候生成值。

>>> mygenerator = (x*x for x in range(3))
>>> for i in mygenerator:
...    print(i)
0
1
4

它和上面的不同僅僅是把`[]替換成()。生成器只能使用一次。

yield

yield和return的用法相似,只是,使用yield函數(shù)將返回一個生成器。

>>> def createGenerator():
...    mylist = range(3)
...    for i in mylist:
...        yield i*i
...
>>> mygenerator = createGenerator() # create a generator
>>> print(mygenerator) # mygenerator is an object!
<generator object createGenerator at 0xb7555c34>
>>> for i in mygenerator:
...     print(i)
0
1
4

當(dāng)你需要使用大量只需要使用一次的數(shù)據(jù)時,你就可以使用yield。
你需要知道的時,當(dāng)你調(diào)用createGenerator()這個函數(shù)時,函數(shù)里面的代碼并不會運(yùn)行,函數(shù)會返回一個生成器對象。
每次對生成器對象用for,函數(shù)里面的代碼都會運(yùn)行一次。
以下是理解的關(guān)鍵部分:

for的每次循環(huán),函數(shù)里面的代碼都會執(zhí)行,直到遇到y(tǒng)ield,然后把值返回。當(dāng)循環(huán)到頭了或者函數(shù)不滿足"if...else"條件時,生成器為空。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI