在装饰器中,获取被装饰器的函数的参数
装饰器中,有两个方法可以获取参数。
-
kwargs获取关键词参数
第一种:在传入实参的时候指定了关键字。比如a=3,b=4
,这种情况是通过kwargs传输的。返回的值是一个dict字典。可以通过args获取 -
args获取位置参数
第二种:在传入实参的时候没有指定关键字,比如1,2,3
。这时候走的是args,返回的值是元祖。可以通过args获取
注:一定要加上@wraps
,其常用于装饰器内部,保护被装饰的函数func属性不被修改。
from functools import wraps
def ak(f):
@wraps(f)
def wrapper(*args, **kwargs):
print('获取位置参数内容', *args)
print('获取位置参数元祖', args)
print('获取关键字参数的key',*kwargs)
print('获取关键字参数的dict',kwargs)
return f(*args, **kwargs)
return wrapper
@ak
def fun1(a=0,b=0,c=8):
print("全是关键字参数")
@ak
def fun2(a,b,c):
print("全是位置参数")
if __name__ == '__main__':
fun1(a=3,b=4)
fun2(1,2,3)
运行结果