簡單介紹 yield
本篇文章會先向你介紹一個陌生的 Python 關(guān)鍵詞,他和 return 就像一對新兄弟,有相似之處,又各有不同。
相似的是:yield 和 return 都可以在一個函數(shù)里將值返回給調(diào)用方;
不同的是:return 后,函數(shù)運行就終止了,而 yield 則只是暫停運行。
關(guān)于 yield 的簡單使用,請先看如下例子
>>> def demo():
... yield 1
... yield 2
... yield 3
...
>>> gen = demo()
>>> gen
>>>
>>>
>>> for i in gen:
... print(i)
...
1
2
3
重點有如下幾個:
含有 yield 的函數(shù),不再是普通的函數(shù),直接調(diào)用含有 yield 的函數(shù),返回的是一個生成器對象(generator object)
可以使用 for 循環(huán)(實際還可以使用 list 或者 next 函數(shù))來遍歷該生成器對象,將 yield 的內(nèi)容一個一個打印出來
向生成器中發(fā)送消息
函數(shù)暫停之后,如果調(diào)用者能在下一次恢復(fù)函數(shù)運行的時候,向它傳遞一些信息,那么整個程序的靈活性會大大提升。
下面通過一個簡明的演示來看看,如何往生成器中發(fā)送消息:
def jumping_range(N):
index = 0
while index < N:
# 通過send()發(fā)送的信息將賦值給jump
jump = yield index
if jump is None:
jump = 1
index += jump
if __name__ == '__main__':
itr = jumping_range(5)
print(next(itr))
print(itr.send(2))
print(next(itr))
print(itr.send(-1))
輸出。
0
2
3
2
這里解釋下為什么這么輸出。 重點是jump = yield index這個語句。
分成兩部分:
1.yield index 是將index return給外部調(diào)用程序。
2.jump = yield 可以接收外部程序通過send()發(fā)送的信息,并賦值給jump
審核編輯:湯梓紅
-
信息
+關(guān)注
關(guān)注
0文章
409瀏覽量
36399 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4417瀏覽量
67514 -
python
+關(guān)注
關(guān)注
57文章
4876瀏覽量
90036
發(fā)布評論請先 登錄
解析Linux的進程、線程和協(xié)程
FreeRTOS任務(wù)和協(xié)程的區(qū)別是什么
NICE協(xié)處理器接口信號解讀--以demo為例
利用Verdi調(diào)試協(xié)處理器的實現(xiàn)步驟
基于E203 NICE協(xié)處理器擴展指令
學(xué)習(xí)Linux應(yīng)該從哪里開始?
跟老齊學(xué)Python:從入門到精通
python入門圣經(jīng)-高清電子書(建議下載)
LuatOS協(xié)程深度解析:小白也能10分鐘學(xué)會,代碼效率直接起飛!
10分鐘上手寫代碼,LuatOS協(xié)程輕松掌握!
進程、線程、協(xié)程傻傻分不清?一文帶你徹底扒光它們的\"底褲\"!
?如何在虛擬環(huán)境中使用 Python,提升你的開發(fā)體驗~
零基礎(chǔ)入門:如何在樹莓派上編寫和運行Python程序?
從yield開始入門python協(xié)程
評論