python decorator使函数的kwargs的dict被视为位置参数

时间:2015-01-30 15:03:51

标签: 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',age=36,score=100)

我得到了预期的结果

in function
arg= damon
arg= julian
score = 100
age = 36

然后我写了一个装饰器制作器函数,我可以用它创建一个装饰器

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}

我理解了wrapper的输出。但是,为什么我的函数的输出将命名参数的dict视为另一个位置参数?我期待输出像

score = 100
age = 36

任何帮助将不胜感激

0 个答案:

没有答案