Python 的內置函數 anext 是 Python 3.10 版本新增的一個異步迭代器操作函數,專門用於異步獲取迭代器的下一個值。它是同步環境中的 next() 函數的異步版本,用於處理異步迭代器(asynchronous iterator)。
函數定義
async def anext(iterator, default=None)
參數説明
iterator: 必須是一個異步迭代器對象(實現了__aiter__和__anext__方法的對象)default: 可選參數,當迭代器耗盡時返回的默認值。如果不提供且迭代器已耗盡,會拋出StopAsyncIteration異常
使用示例
-
基本用法:
async def async_gen(): yield 1 yield 2 async def main(): ag = async_gen() print(await anext(ag)) # 輸出 1 print(await anext(ag)) # 輸出 2 print(await anext(ag, "end")) # 輸出 "end" -
與異步生成器配合使用:
async def countdown(n): while n > 0: yield n n -= 1 await asyncio.sleep(1) async def main(): async for number in countdown(3): print(number) # 等價於 cd = countdown(3) while True: try: print(await anext(cd)) except StopAsyncIteration: break
注意事項
- 必須用在
async函數中,且需要使用await關鍵字 - 如果迭代器不是異步迭代器,會拋出
TypeError - 在沒有默認值且迭代器耗盡時,會拋出
StopAsyncIteration異常 - 在 Python 3.10 之前的版本中,可以通過
await iterator.__anext__()實現類似功能
應用場景
- 處理異步數據流(如網絡請求響應)
- 實現自定義異步迭代器
- 在異步環境中逐步處理大量數據
與 next() 的區別
| 特性 | next() | anext() |
|---|---|---|
| 工作環境 | 同步 | 異步 |
| 異常類型 | StopIteration | StopAsyncIteration |
| 調用方式 | 直接調用 | 需要 await |
| 迭代器類型 | 同步迭代器 | 異步迭代器 |
這個函數簡化了異步迭代器的操作,使得異步編程更加直觀和方便。