все Python 3astпонятие
ast.ListComp
выражения
Узел спискового включения [elt for … in … if …]: elt — выражение элемента, generators — список узлов comprehension.
Синтаксис
ast.ListComp(elt, generators)
Вложенные for идут в generators в том порядке, в каком написаны, — первый внешний: [y for x in m for y in x] даёт два comprehension, и цель второго ссылается на первый. Тернарный оператор в elt ('a if c else b for …') — это IfExp в elt, а не фильтр: фильтр — только if после for, он попадает в ifs. Цель цикла — Name с ctx=Store.
Примеры
import ast
lc = ast.parse('[y for x in m for y in x if y]', mode='eval').body
print(type(lc).__name__, len(lc.generators)) # → ListComp 2
print([g.target.id for g in lc.generators], len(lc.generators[1].ifs)) # → ['x', 'y'] 1
import ast
lc = ast.parse('[a if c else b for a in s]', mode='eval').body
print(type(lc.elt).__name__, lc.generators[0].ifs) # → IfExp []
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности