装饰器用于对现有函数进行功能补充,在不修改原函数的代码上,可以对原函数的参数、执行前后进行功能追加。
def checker(func):
def inner(*args, **kwargs):
print("执行前检查")
print(args, kwargs)
if args[0] <10:
print('值小于10,不通过')
raise ValueError
return func(*args, **kwargs)
return inner
@checker
def add_num(a, b=11):
""""普通的相加函数,在装饰器中追加验证:a必须大于10"""
print(a+b)
add_num(12,b=14)
add_num(1, b=14)
输出结果如下
执行前检查
(12,) {
'b': 14}
26
执行前检查
(1,) {
'b': 14}
值小于10,不通过
File "/Users/tomjerry/PycharmProjects/pythonProject/main.py", line 22, in inner
raise ValueError
ValueError
在装饰器中的 args 和 kwargs 分别表示被装饰函数中的两种参数,arg表示的是原函数的无默认值形参,kwargs表示的是函数中带有默认值的形参