decorator - 设置包装函数参数名称和值

时间:2014-03-24 09:09:17

标签: python decorator args kwargs

是否可以为包装函数提供它所包含的函数的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的副本。无论如何,谢谢你的答案

1 个答案:

答案 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