Вы не распаковываете свои аргументы. Когда вы используете упакованные аргументы с *args, **kwargs
, python берет то, что передано в вашу функцию, и присваивает его переменной args как кортеж. Например:
def f(*args):
print(type(args))
print(args[0])
print(args[-1])
f(1, 2, 3)
выдаст
<class 'tuple'>
1
3
Чтобы обойти это, вы можете распаковать переменные, как только они будут упакованы с *
.
В вашем примере:
from functools import wraps
def decorator(f):
@wraps(f)
def wrapping(*args,**kwargs):
print (f(*args)) # <----- notice we are now unpacking args into
# the function x, removing the wrapped tuple
if f(*args) == 1:
return True
return f(*args,**kwargs)
return wrapping
@decorator
def f(x):
return x
x=1
print(f(x))
это должно вывести ожидаемый результат.