使用示例
from functools import wraps
def dec(func):
@wraps(func)
def wrapper(*args, **kwargs):
kwargs['name'] = 'no'
kwargs['value'] = 'v'
return func(*args, **kwargs)
return wrapper
@dec
def foo(p1, p2, p3, name, value, p4='a'):
print('p1: {}, p2: {}, p3:{}, name: {}, value:{}, p4: {}'.format(
p1, p2, p3, name, value, p4
))
# p1,p2, p3是位置参数
# name,value 是关键字参数
# p4 默认参数
foo('a', 'b', 'c')
foo('a1', 'b1', 'c1', name = 'name')
小结
主要关注如果装饰器会修改被装饰函数的参数时,如何去定义被装饰的函数
网友评论