Python Glossary English

Python 3.8+astпонятие

ast.FunctionType

корень и базовые узлы

Корень для mode='func_type': разбирает старый комментарий типов функции вида '(int, str) -> bool' на argtypes и returns.

Синтаксис

ast.parse('(argtypes) -> returns', mode='func_type')  # → ast.FunctionType

Узел нужен инструментам вроде mypy, которые читают комментарии '# type: (int) -> str' из кода, написанного до аннотаций. Сам ast.parse такие комментарии из исходника не достаёт: нужен type_comments=True, после чего строка лежит в поле type_comment у FunctionDef, и её приходится отдельно разобрать в режиме 'func_type'. Ни выполнить, ни скомпилировать такое дерево нельзя.

Примеры

import ast
ft = ast.parse('(int, str) -> bool', mode='func_type')
print(type(ft).__name__)  # → FunctionType
print([a.id for a in ft.argtypes], ft.returns.id)  # → ['int', 'str'] bool
import ast
src = 'def f(a):\n    # type: (int) -> str\n    return str(a)'
fn = ast.parse(src, type_comments=True).body[0]
print(fn.type_comment)  # → (int) -> str
print(ast.parse(fn.type_comment, mode='func_type').returns.id)  # → str

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности