本文目录导读:

Python 的 await 语法核心语法没有变化,但在不同 Python 版本中支持的功能和上下文有所扩展,以下是关键点:
核心语法不变
await 始终用于挂起协程的执行,直到等待的 awaitable 对象完成:
async def main():
result = await some_async_function()
return result
不同版本的变化
Python 3.5-3.6(初版)
await仅在async def函数内部可用- 只能等待协程、Future 或实现了
__await__的对象
Python 3.7+
- 将
asyncio提升为顶级关键字,但await语法不变 - 引入了
asyncio.run()简化事件循环启动
Python 3.8+(重要变化)
- 在交互式 REPL 中允许使用
await:# Python 3.8+ REPL >>> import asyncio >>> await asyncio.sleep(1) # 直接可用
- 无需再写
asyncio.run(...)在 REPL 中
Python 3.10+
- 更好的错误信息
- 异步上下文管理器和异步迭代器的改进
Python 3.11+(重大改进)
- 在 with 语句中可以使用 await(异步上下文管理器更流畅):
async with open_connection() as conn: data = conn.recv() - 更好的性能:async/await 开销显著降低
Python 3.12+
- 类型化 await:
typing模块对 awaitable 的支持增强 - 异常追踪改进
注意事项
# ❌ 旧写法(Python <3.8 不能在 module 级别使用)
await some_coro() # SyntaxError
# ✅ 新写法(Python 3.8+ 在交互环境可以)
# 但脚本中仍需 async 函数
async def main():
await some_coro()
| 版本 | 变化 |
|---|---|
| 5 | 引入 await 语法 |
| 8 | REPL 支持 await |
| 11 | 性能优化 |
| 12+ | 类型系统增强 |
核心用法没有根本变化,只是可用场景和性能在持续改进,如果你是从旧版本升级,主要注意 REPL 和性能变化即可。