Python 異步之推導式示例詳解
引言
當我們想到“pythonic”時,理解,如列表和字典理解是 Python 的一個特性。
這是我們執(zhí)行循環(huán)的一種方式,與許多其他語言不同。
Asyncio 允許我們使用異步推導式。
我們可以通過“async for”表達式使用異步推導式來遍歷異步生成器和異步迭代器。
1. 什么是異步推導式
異步推導式是經(jīng)典推導式的異步版本。Asyncio 支持兩種類型的異步推導式,它們是“async for”推導式和“await”推導式。
在我們看每之前,讓我們首先回顧一下經(jīng)典的推導式。
2. 推導式
推導式允許以簡潔的方式創(chuàng)建列表、字典和集合等數(shù)據(jù)集合。列表推導式允許從新列表表達式中的 for 表達式創(chuàng)建列表。
... # create a list using a list comprehension result = [a*2 for a in range(100)]
還支持推導式來創(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. 異步推導式
異步推導式允許使用帶有異步可迭代對象的“async for”表達式來創(chuàng)建列表、集合或字典。
... # async list comprehension with an async iterator result = [a async for a in aiterable]
這將根據(jù)需要創(chuàng)建和安排協(xié)程或任務,并將其結果放入列表中。
回想一下,“async for”表達式只能在協(xié)程和任務中使用。
另外,回想一下異步迭代器是一個產(chǎn)生可等待對象的迭代器。
“async for”表達式允許調(diào)用者遍歷等待對象的異步迭代器并從每個對象中檢索結果。
在內(nèi)部,async for 循環(huán)將根據(jù)需要自動解析或等待每個可等待的調(diào)度協(xié)程。
異步生成器自動實現(xiàn)異步迭代器的方法,也可用于異步推導式。
... # async list comprehension with an async generator result = [a async for a in agenerator]
4. Await 推導式
“等待”表達式也可以在列表、集合或字典理解中使用,稱為等待推導式。
與異步推導式一樣,它只能在異步協(xié)程或任務中使用。
這允許通過掛起和等待一系列可等待對象來創(chuàng)建數(shù)據(jù)結構,如列表。
... # await list compression with a collection of awaitables results = [await a for a in awaitables]
這將通過依次等待每個可等待對象來創(chuàng)建結果列表。
當前協(xié)程將被掛起以順序執(zhí)行可等待對象,這與使用 asyncio.gather() 并發(fā)執(zhí)行它們不同,而且可能更慢。
以上就是Python 異步之推導式示例詳解的詳細內(nèi)容,更多關于Python 異步推導式的資料請關注腳本之家其它相關文章!
相關文章
python實現(xiàn)將json多行數(shù)據(jù)傳入到mysql中使用
這篇文章主要介紹了python實現(xiàn)將json多行數(shù)據(jù)傳入到mysql中使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-12-12Python selenium+cookie實現(xiàn)免密登陸的示例代碼
本文主要介紹了Python selenium+cookie實現(xiàn)免密登陸的示例代碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02