Python Glossary English

Python 3.3+inspectпонятие

inspect.Parameter

сигнатуры

Один параметр сигнатуры: имя, вид (позиционный, именованный, *args, **kwargs), значение по умолчанию и аннотация.

Синтаксис

inspect.Parameter(name, kind, *, default=Parameter.empty, annotation=Parameter.empty)

«Нет значения по умолчанию» — это Parameter.empty, а не None: default=None — настоящее умолчание, и проверка «p.default is None» путает два случая. Вид параметра читают из p.kind (POSITIONAL_ONLY … VAR_KEYWORD), а не угадывают по звёздочкам в str(p); виды упорядочены и сравниваются через <. Объект неизменяемый: присваивание p.default падает с AttributeError, копию с другим значением даёт p.replace(default=...).

Примеры

import inspect
def f(a, /, b, *args, c, d=None, **kw): pass
for p in inspect.signature(f).parameters.values():
    print(p.name, p.kind.name)
# → a POSITIONAL_ONLY / b POSITIONAL_OR_KEYWORD / args VAR_POSITIONAL / c KEYWORD_ONLY / d KEYWORD_ONLY / kw VAR_KEYWORD
# Python 3.11+
import inspect
params = inspect.signature(lambda c, d=None: 0).parameters
print(params['c'].default is inspect.Parameter.empty)  # → True
print(params['d'].default is inspect.Parameter.empty, params['d'].default)  # → False None
print(params['d'].replace(default=5))  # → d=5
try:
    params['d'].default = 5
except AttributeError as e:
    print(e)  # → property 'default' of 'Parameter' object has no setter

См. также

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