все Python 3astпонятие
ast.FunctionDef
функции и классы
Узел инструкции def: name, args (узел arguments), body, decorator_list, returns, type_comment, а с 3.12 — type_params.
Синтаксис
ast.FunctionDef(name, args, body, decorator_list, returns, type_comment, type_params)
async def — другой класс, AsyncFunctionDef, и isinstance(node, ast.FunctionDef) его не ловит: проверяйте кортеж из обоих. lineno указывает на строку def, а не на первый декоратор. Docstring — просто первая инструкция Expr с Constant в body; достаёт его ast.get_docstring. Аннотация возврата лежит в returns узлом выражения, а не строкой.
Примеры
import ast
src = '@cache\ndef area(r: float) -> float:\n "Площадь."\n return 3.14 * r * r'
fn = ast.parse(src).body[0]
print(type(fn).__name__, fn.name, fn.lineno) # → FunctionDef area 2
print(fn.decorator_list[0].id, fn.returns.id, fn.args.args[0].arg) # → cache float r
print(ast.get_docstring(fn)) # → Площадь.
import ast
tree = ast.parse('def f(): pass\nasync def g(): pass')
print([n.name for n in tree.body if isinstance(n, ast.FunctionDef)]) # → ['f']
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности