Python Glossary English

Python 3.12+astпонятие

ast.ParamSpec

параметры типов

Узел параметра типа **P в квадратных скобках (Python 3.12): name — строка, с 3.13 ещё default_value.

Синтаксис

ast.ParamSpec(name, default_value=None)

Звёздочки в поле name не попадают: для **P name равно 'P', и вид параметра определяется только типом узла. Границы у ParamSpec нет — поля bound нет, в отличие от TypeVar. Старая запись P = ParamSpec('P') в ast — это Assign с вызовом, а не ast.ParamSpec.

Примеры

import ast
f = ast.parse('def deco[**P, R](fn): ...').body[0]
print([type(p).__name__ for p in f.type_params])  # → ['ParamSpec', 'TypeVar']
print(f.type_params[0].name, hasattr(f.type_params[0], 'bound'))  # → P False

См. также

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