все Python 3astпонятие
ast.GeneratorExp
выражения
Узел генераторного выражения (x for x in y): elt — вычисляемое выражение, generators — список узлов comprehension.
Синтаксис
ast.GeneratorExp(elt, generators)
Скобки самого генератора в дереве не видны: в sum(x for x in y) GeneratorExp лежит прямо в Call.args, и отличить его от sum((x for x in y)) по дереву нельзя. Несколько for в одном выражении — несколько comprehension в generators, в порядке записи слева направо; if-фильтры живут в comprehension.ifs, а не в GeneratorExp.
Примеры
import ast
call = ast.parse('sum(x * x for x in data if x)', mode='eval').body
gen = call.args[0]
print(type(gen).__name__, type(gen.elt).__name__) # → GeneratorExp BinOp
print(gen.generators[0].target.id, len(gen.generators[0].ifs)) # → x 1
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности