Python 3.0+inspectфункция
inspect.getfullargspec()
сигнатуры
Старый способ узнать параметры функции: именованный кортеж FullArgSpec. Оставлен для совместимости; новый код пишут на inspect.signature().
Синтаксис
inspect.getfullargspec(func)
Функция не устарела (решение 3.5 отменили в 3.6), но врёт на современном коде: позиционно-только параметры молча попадают в args, и «/» теряется; __wrapped__ игнорируется, так что у функции под functools.wraps видна сигнатура обёртки (*args, **kwargs); у связанного метода в args остаётся self. signature() всего этого лишён. Её предшественника getargspec в 3.11 удалили.
Примеры
import inspect
def g(a, /, b, *, c=2): pass
spec = inspect.getfullargspec(g)
print(spec.args, spec.kwonlyargs, spec.kwonlydefaults) # → ['a', 'b'] ['c'] {'c': 2} — «/» потерян
print(inspect.signature(g)) # → (a, /, b, *, c=2)
import functools, inspect
def deco(fn):
@functools.wraps(fn)
def wrapper(*args, **kwargs):
return fn(*args, **kwargs)
return wrapper
@deco
def h(x, y=2): pass
spec = inspect.getfullargspec(h)
print(spec.args, spec.varargs, spec.varkw) # → [] args kwargs
print(inspect.signature(h)) # → (x, y=2)
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности