我正在尝试找到一种方法,将函数的默认参数传递给装饰器。我必须说我对装饰器的了解还比较浅,所以可能我没有正确地理解它,但我还没有找到任何答案。
这是我从Python functools.wraps
手册页面修改过的示例。
from functools import wraps
def my_decorator(f):
@wraps(f)
def wrapper(*args, **kwds):
print('Calling decorated function')
print('args:', args)
print('kwargs:', kwds)
return f(*args, **kwds)
return wrapper
@my_decorator
def example(i, j=0):
"""Docstring"""
print('Called example function')
example(i=1)
我希望
j=0
也被传递,因此输出应为:Calling decorated function
args: ()
kwargs: {'i': 1, 'j': 0}
Called example function
但我却得到
Calling decorated function
args: ()
kwargs: {'i': 1}
Called example function
j=0
被传递了,但不在wrapper
内部。如果你在example
内部打印i, j
,你会看到它在那里。你可以使用例如inspect.getargspec(f)
来查看被装饰函数上设置的默认值,但是为什么需要在wrapper
中访问默认值呢? - jonrsharpeexample
,但是我需要将j
传递给wrapper
,因为我需要在许多函数中进行计算。 不过一般来说使用inspect.getargspec(f)
就可以了,谢谢。 - Mike Volk