本文目录导读:

是的,Python 支持异步推导式(Async Comprehensions)。
自 Python 3.6 起,异步推导式就已经被引入,不过需要注意以下几点:
语法要求
异步推导式只能在 async def 函数 内部使用,并且需要使用 async for:
import asyncio
async def async_comprehension():
# 异步列表推导式
result = [x async for x in async_generator()]
return result
async def async_generator():
for i in range(5):
await asyncio.sleep(0.1)
yield i
# 运行
result = asyncio.run(async_comprehension())
print(result) # [0, 1, 2, 3, 4]
支持的推导式类型
Python 支持所有四种异步推导式:
async def demo():
# 1. 异步列表推导式
list_result = [x async for x in async_gen()]
# 2. 异步集合推导式
set_result = {x async for x in async_gen()}
# 3. 异步字典推导式
dict_result = {x: x**2 async for x in async_gen()}
# 4. 异步生成器表达式
gen_result = (x async for x in async_gen())
混合使用 await 和 async for
还可以在推导式中混合使用 await:
async def mixed():
# 在 async for 中使用 await
result = [await process(x) async for x in async_gen()]
# 在条件中使用 await
result = [x async for x in async_gen() if await condition(x)]
async def process(x):
await asyncio.sleep(0.1)
return x * 2
async def condition(x):
await asyncio.sleep(0.1)
return x % 2 == 0
异步推导式 vs 普通推导式
# 普通推导式(同步) result = [x for x in range(10)] # 异步推导式 async_result = [x async for x in async_range(10)]
重要说明
- 不能在普通函数中使用:异步推导式只能在
async def函数内部使用 - 不能在模块级别使用:不能在模块顶层代码中使用
- 需要 awaitable 对象:
async for需要异步可迭代对象(实现__aiter__和__anext__)
Python 版本支持
- Python 3.6+:支持基本异步推导式
- Python 3.7+:完善了支持,修复了一些边缘情况
- Python 3.8+:性能优化和更多场景支持
只要你的 Python 版本 >= 3.6,就可以放心使用异步推导式!