Python 3.x python decorator使函数的kwargs的dict被视为位置参数

Python 3.x python decorator使函数的kwargs的dict被视为位置参数,python-3.x,python-decorators,Python 3.x,Python Decorators,我正在试验用python3编写装饰函数。我编写了一个简单的函数,它可以接受任意数量的位置参数和命名参数,如下所示 def function(*args,**kwargs): print('\nin function') for arg in args: print('arg=',arg) for k,v in kwargs.items(): print(k,'=',v) 当我调用这个函数时 function('damon','julian

我正在试验用python3编写装饰函数。我编写了一个简单的函数,它可以接受任意数量的位置参数和命名参数,如下所示

def function(*args,**kwargs):
    print('\nin function')
    for arg in args:
        print('arg=',arg)
    for k,v in kwargs.items():
        print(k,'=',v)
当我调用这个函数时

function('damon','julian',age=36,score=100)
我得到了预期的结果

in function
arg= damon
arg= julian
score = 100
age = 36
然后我编写了一个decoratormaker函数,我可以用它创建一个decorator

def make_decorator(*dargs,**dkwargs):
    def deco(f):
        def wrapper(*fargs,**fkwargs):
            print('\nin decorator:wrapper')
            print('dargs=',dargs)
            print('dkwargs=',dkwargs)
            f(fargs,fkwargs)
        return wrapper
    return deco
我用这个来装饰我的功能

@make_decorator('D1','D2',name='deco')
def function(*args,**kwargs):
    print('\nin function')
    for arg in args:
        print('arg=',arg)
    for k,v in kwargs.items():
        print(k,'=',v)
当我调用函数时,我得到这个结果

in decorator:wrapper
dargs= ('D1', 'D2')
dkwargs= {'name': 'deco'}

in function
arg= ('damon', 'julian')
arg= {'age': 36, 'score': 100}
我理解包装器的输出。但是,为什么我函数的输出会将命名参数的dict视为另一个位置参数呢?我希望有这样的输出

score = 100
age = 36

任何帮助都将不胜感激

,因为您调用的是
f(fargs,fkwargs)
而不是
f(*fargs,**fkwargs)
;您正在将位置参数元组和关键字参数字典作为两个位置参数传递。谢谢@jornshape,我的错误!!