yield 是python中非常有用的乙個關鍵字,可以實現很多魔法。yield關鍵字主要有一下幾個用法。
1.yield基本用法
yield用在函式中,實現類似用return的功能,但是返回的是乙個generator.
更多詳細解釋,參考下邊的**。
如何正確理解yiled在函式中的作用
2.yield實現上下文管理器
下邊一段**很好體現這個功能。廢話不多說,直接上**。
import time
from contextlib import contextmanager
@contextmanager
deftimethis
(label)
:start = time.time(
)try
:yield
finally
:end = time.time(
)print
('{}: {}'
.format
(label, end - start)
)# example use
with timethis(
'counting'):
n =10000000
while n >0:
n -=
1
在函式timethis() 中,yield 之前的**會在上下文管理器中作為__enter__()方法執行,所有在yield 之後的**會作為__exit__() 方法執行。如果出現了異常,異常會在yield 語句那裡丟擲。
3.利用yield 關鍵字實現協程。
傳統的生產者-消費者模型是乙個執行緒寫訊息,乙個執行緒取訊息,通過鎖機制控制佇列和等待,但一不小心就可能死鎖。
如果改用協程,生產者生產訊息後,直接通過yield跳轉到消費者開始執行,待消費者執行完畢後,切換回生產者繼續生產,效率極高:
具體內容參考下邊**:
如何使用協程
關於python3 的高階特性yield用法與實踐
針對於理解yield,那麼首先了解迭代器,生成器,最後去了解yield 執行函式 mylist 1,2,3 for i in mylist print i 輸出結果 12 3 這裡的mylist是乙個可迭代物件,當你使用乙個列表生成式來建立乙個列表的時候,就建立了乙個可迭代的物件 使用列表生成式新增...
用yield關鍵詞實現列表的分組
我們可以使用yield函式來方便的將乙個列表分割成n分,寫成divide iter lst,n 的介面形式。我們這裡注意到yield會把返回值依次儲存到生成器generator中,並且把while迴圈走完。要注意的是,這裡我們還需要重新掌握以下知識點 1.列表的切片操作 lst i div i 1 ...
python根據方程的y求x 用Python解方程
我們先從簡單的來 例題1 這是北師大版小學六年級上冊課本95頁的一道解方程練習題 大家可以先口算一下,這道題裡面的x的值為200 接下來我們用python來實現,如下,每一句 後面都寫有解釋語 1 import sympy 引入解方程的專業模組sympy 2 x sympy.symbols x 申明...