Python Glossary English

все 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Сообщить о неточности