Python:传递函数的默认值';*args或**kwargs的参数

Python:传递函数的默认值';*args或**kwargs的参数,python,python-3.x,decorator,default-value,metaclass,Python,Python 3.x,Decorator,Default Value,Metaclass,举个例子: def decorator(func): def wrapper(*args, **kwargs): print(args, kwargs) func(*args, **kwargs) return wrapper @decorator def foo(x, y, z=0): pass foo(5, 5) 输出: (5, 5) {} 为什么不(5,5){'z':0}?如何仅使用decorator(对于函数)或元类(对于类

举个例子:

def decorator(func):
    def wrapper(*args, **kwargs):
        print(args, kwargs)
        func(*args, **kwargs)
    return wrapper

@decorator
def foo(x, y, z=0):
    pass

foo(5, 5)
输出:

(5, 5) {}

为什么不
(5,5){'z':0}
?如何仅使用decorator(对于函数)或元类(对于类方法,例如
\uu init\uuuu
)将函数
foo
的所有默认值传递给
*args
**kwargs

包装器只是一个普通函数。它不能“访问”包装函数的内部

你必须用内省来获得它们。见相关问题:


还要注意,如果使用
foo(5,5,42)
,则
包装器将接收
(5,5,42)
,但如果使用
foo(5,5,42)
,则它将接收
(5,5),z':42}