Python 異步之推導(dǎo)式示例詳解
引言
當(dāng)我們想到“pythonic”時(shí),理解,如列表和字典理解是 Python 的一個(gè)特性。
這是我們執(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)式允許以簡(jiǎn)潔的方式創(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)式允許使用帶有異步可迭代對(duì)象的“async for”表達(dá)式來創(chuàng)建列表、集合或字典。
... # async list comprehension with an async iterator result = [a async for a in aiterable]
這將根據(jù)需要?jiǎng)?chuàng)建和安排協(xié)程或任務(wù),并將其結(jié)果放入列表中。
回想一下,“async for”表達(dá)式只能在協(xié)程和任務(wù)中使用。
另外,回想一下異步迭代器是一個(gè)產(chǎn)生可等待對(duì)象的迭代器。
“async for”表達(dá)式允許調(diào)用者遍歷等待對(duì)象的異步迭代器并從每個(gè)對(duì)象中檢索結(jié)果。
在內(nèi)部,async for 循環(huán)將根據(jù)需要自動(dòng)解析或等待每個(gè)可等待的調(diào)度協(xié)程。
異步生成器自動(dòng)實(shí)現(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ù)中使用。
這允許通過掛起和等待一系列可等待對(duì)象來創(chuàng)建數(shù)據(jù)結(jié)構(gòu),如列表。
... # await list compression with a collection of awaitables results = [await a for a in awaitables]
這將通過依次等待每個(gè)可等待對(duì)象來創(chuàng)建結(jié)果列表。
當(dāng)前協(xié)程將被掛起以順序執(zhí)行可等待對(duì)象,這與使用 asyncio.gather() 并發(fā)執(zhí)行它們不同,而且可能更慢。
以上就是Python 異步之推導(dǎo)式示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Python 異步推導(dǎo)式的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python皮爾遜相關(guān)性數(shù)據(jù)分析分析及實(shí)例代碼
這篇文章主要為大家介紹了python皮爾遜相關(guān)性分析及實(shí)例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
Python讀取及保存mat文件的注意事項(xiàng)說明
這篇文章主要介紹了Python讀取及保存mat文件的注意事項(xiàng)說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
Python中pip安裝非PyPI官網(wǎng)第三方庫的方法
這篇文章主要介紹了Python中pip安裝非PyPI官網(wǎng)第三方庫的方法,pip最新的版本(1.5以上的版本), 出于安全的考 慮,pip不允許安裝非PyPI的URL,本文就給出兩種解決方法,需要的朋友可以參考下2015-06-06
python dict remove數(shù)組刪除(del,pop)
我們?cè)谟脭?shù)組列表做刪除的時(shí)候,可能選擇2個(gè)方法,一個(gè)是del,一個(gè)是pop方法2013-03-03
LyScript實(shí)現(xiàn)指令查詢功能的示例代碼
對(duì)LyScript自動(dòng)化插件進(jìn)行二次封裝,可以實(shí)現(xiàn)從內(nèi)存中讀入目標(biāo)進(jìn)程解碼后的機(jī)器碼。所以本文為大家介紹了如何實(shí)現(xiàn)LyScript指令查詢功能,需要的可以參考一下2022-09-09
使用Python將數(shù)組的元素導(dǎo)出到變量中(unpacking)
最近工作中遇到一個(gè)問題,需要利用Python將數(shù)組(list)或元組(tuple)中的元素導(dǎo)出到N個(gè)變量中,現(xiàn)在將我實(shí)現(xiàn)的方法分享給大家,有需要的朋友們可以參考借鑒,下面來一起看看吧。2016-10-10

