关于程序员:Python-异步-异步推导式18

36次阅读

共计 1188 个字符,预计需要花费 3 分钟才能阅读完成。

动动发财的小手,点个赞吧!

当咱们想到“pythonic”时,了解,如列表和字典了解是 Python 的一个个性。

这是咱们执行循环的一种形式,与许多其余语言不同。

Asyncio 容许咱们应用异步推导式。

咱们能够通过“async for”表达式应用异步推导式来遍历异步生成器和异步迭代器。

1. 什么是异步推导式

异步推导式是经典推导式的异步版本。Asyncio 反对两种类型的异步推导式,它们是“async for”推导式和“await”推导式。

在咱们看每之前,让咱们首先回顾一下经典的推导式。

2. 推导式

推导式容许以简洁的形式创立列表、字典和汇合等数据汇合。列表推导式容许从新列表表达式中的 for 表达式创立列表。

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

还反对推导式来创立字典和汇合。

...
# 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”表达式来创立列表、汇合或字典。

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

这将依据须要创立和安顿协程或工作,并将其后果放入列表中。

回忆一下,“async for”表达式只能在协程和工作中应用。

另外,回忆一下异步迭代器是一个产生可期待对象的迭代器。

“async for”表达式容许调用者遍历期待对象的异步迭代器并从每个对象中检索后果。

在外部,async for 循环将依据须要主动解析或期待每个可期待的调度协程。

异步生成器主动实现异步迭代器的办法,也可用于异步推导式。

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

4. Await 推导式

“期待”表达式也能够在列表、汇合或字典了解中应用,称为期待推导式。

与异步推导式一样,它只能在异步协程或工作中应用。

这容许通过挂起和期待一系列可期待对象来创立数据结构,如列表。

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

这将通过顺次期待每个可期待对象来创立后果列表。

以后协程将被挂起以程序执行可期待对象,这与应用 asyncio.gather() 并发执行它们不同,而且可能更慢。

本文由 mdnice 多平台公布

正文完
 0