是否可以为包装函数提供它所包含的函数的arg和kwargs名称?我需要这样做,因为稍后应用的装饰器使用底层函数的arg名称。
def wrapper(func):
def wrapped(<func args and kwargs names and values>):
return func(*args, **kwargs)
因此,如果传入的func是foo(x,y = 3),则返回的包装函数将包含签名(x,y = 3)而不是通常的包装(* args,** kwargs)。
- 编辑 -
刚发现这是Preserving signatures of decorated functions的副本。无论如何,谢谢你的答案
答案 0 :(得分:0)
我不确定我完全理解你的问题,这不是你所期望的吗?
>>> def wrapper(func):
def wrapped(*args, **kwargs):
print args, kwargs
return func(*args, **kwargs)
return wrapped
>>> @wrapper
def foo(x, y=3):
return x + y
>>> foo(3)
(3,) {}
6
>>> foo(3, 5)
(3, 5) {}
8
>>> foo(3, y=5)
(3,) {'y': 5}
8