溫馨提示×

溫馨提示×

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

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

Python異步之推導(dǎo)式怎么應(yīng)用

發(fā)布時間:2023-03-22 11:43:47 來源:億速云 閱讀:104 作者:iii 欄目:開發(fā)技術(shù)

這篇“Python異步之推導(dǎo)式怎么應(yīng)用”文章的知識點大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Python異步之推導(dǎo)式怎么應(yīng)用”文章吧。

引言

當(dāng)我們想到“pythonic”時,理解,如列表和字典理解是 Python 的一個特性。

這是我們執(zhí)行循環(huán)的一種方式,與許多其他語言不同。

Asyncio 允許我們使用異步推導(dǎo)式。

我們可以通過“async for”表達(dá)式使用異步推導(dǎo)式來遍歷異步生成器和異步迭代器。

1. 什么是異步推導(dǎo)式

異步推導(dǎo)式是經(jīng)典推導(dǎo)式的異步版本。Asyncio 支持兩種類型的異步推導(dǎo)式,它們是“async for”推導(dǎo)式和“await”推導(dǎo)式。

在我們看每之前,讓我們首先回顧一下經(jīng)典的推導(dǎo)式。

2. 推導(dǎo)式

推導(dǎo)式允許以簡潔的方式創(chuàng)建列表、字典和集合等數(shù)據(jù)集合。列表推導(dǎo)式允許從新列表表達(dá)式中的 for 表達(dá)式創(chuàng)建列表。

...
# create a list using a list comprehension
result = [a*2 for a in range(100)]

還支持推導(dǎo)式來創(chuàng)建字典和集合。

...
# create a dict using a comprehension
result = {a:i for a,i in zip(['a','b','c'],range(3))}
# create a set using a comprehension
result = {a for a in [1, 2, 3, 2, 3, 1, 5, 4]}

3. 異步推導(dǎo)式

異步推導(dǎo)式允許使用帶有異步可迭代對象的“async for”表達(dá)式來創(chuàng)建列表、集合或字典。

...
# async list comprehension with an async iterator
result = [a async for a in aiterable]

這將根據(jù)需要創(chuàng)建和安排協(xié)程或任務(wù),并將其結(jié)果放入列表中。

回想一下,“async for”表達(dá)式只能在協(xié)程和任務(wù)中使用。

另外,回想一下異步迭代器是一個產(chǎn)生可等待對象的迭代器。

“async for”表達(dá)式允許調(diào)用者遍歷等待對象的異步迭代器并從每個對象中檢索結(jié)果。

在內(nèi)部,async for 循環(huán)將根據(jù)需要自動解析或等待每個可等待的調(diào)度協(xié)程。

異步生成器自動實現(xiàn)異步迭代器的方法,也可用于異步推導(dǎo)式。

...
# async list comprehension with an async generator
result = [a async for a in agenerator]

4. Await 推導(dǎo)式

“等待”表達(dá)式也可以在列表、集合或字典理解中使用,稱為等待推導(dǎo)式。

與異步推導(dǎo)式一樣,它只能在異步協(xié)程或任務(wù)中使用。

這允許通過掛起和等待一系列可等待對象來創(chuàng)建數(shù)據(jù)結(jié)構(gòu),如列表。

...
# await list compression with a collection of awaitables
results = [await a for a in awaitables]

這將通過依次等待每個可等待對象來創(chuàng)建結(jié)果列表。

當(dāng)前協(xié)程將被掛起以順序執(zhí)行可等待對象,這與使用 asyncio.gather() 并發(fā)執(zhí)行它們不同,而且可能更慢。

以上就是關(guān)于“Python異步之推導(dǎo)式怎么應(yīng)用”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道。

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

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

AI