我正在尝试在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
任何帮助将不胜感激