Pytho高階篇 yield的用法

2021-10-03 08:11:11 字數 974 閱讀 9673

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 申明...