【发布时间】:2015-10-22 01:56:12
【问题描述】:
我正在尝试找到一种将函数的默认参数传递给装饰器的方法。我不得不说我对装饰行业还很陌生,所以也许我没有正确理解它,但我还没有找到任何答案。
这是我修改后的 Python functools.wraps manual page 示例。
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中使用print i, j,您会看到它就在那里。你可以使用例如inspect.getargspec(f)来查看被装饰的函数设置了哪些默认值,但是为什么需要访问wrapper中的默认值? -
我知道它已传递给
example,但我需要将j传递给wrapper,因为我使用许多函数进行计算时需要它。但通常使用inspect.getargspec(f)会起作用,谢谢。
标签: python arguments decorator python-decorators