все Python 3astфункция
ast.walk()
вспомогательные функции
Генератор, обходящий все узлы дерева, включая сам корень. Самый короткий способ найти в коде все вызовы, имена или циклы.
Синтаксис
for node in ast.walk(tree): ...
Порядок обхода — в ширину, а не по тексту программы: узлы вложенного выражения могут прийти раньше соседних строк, поэтому для порядка сортируйте по (lineno, col_offset). walk не знает контекста (внутри какой функции узел) и выдаёт служебные узлы вроде Load и Add; когда нужен контекст или замена узлов, берут NodeVisitor/NodeTransformer.
Примеры
import ast
tree = ast.parse('print(len(s))\nx = input()')
calls = [n.func.id for n in ast.walk(tree) if isinstance(n, ast.Call)]
print(sorted(calls)) # → ['input', 'len', 'print']
import ast
tree = ast.parse('a + f(b)', mode='eval')
print([type(n).__name__ for n in ast.walk(tree)][:5])
# → ['Expression', 'BinOp', 'Name', 'Add', 'Call']
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности