Python 3.5+astпонятие
ast.AsyncFor
async
Узел цикла async for: те же поля, что у For, — target, iter, body, orelse и type_comment. Допустим только внутри async def.
Синтаксис
ast.AsyncFor(target, iter, body, orelse, type_comment=None)
Отдельный класс, не подкласс For: visit_For его не увидит. ast.parse пропускает async for даже на уровне модуля, а ошибку 'async for' outside async function даёт только compile(). async for в генераторе списка — это не AsyncFor, а comprehension с is_async=1.
Примеры
import ast
fn = ast.parse('async def f():\n async for row in rows:\n pass').body[0]
loop = fn.body[0]
print(type(loop).__name__, loop.target.id, isinstance(loop, ast.For)) # → AsyncFor row False
import ast
comp = ast.parse('[x async for x in aiter_()]', mode='eval').body
print(type(comp).__name__, comp.generators[0].is_async) # → ListComp 1
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности