1.什么是装饰器
作用:装饰器是用来给函数添加功能
本质:就是一个函数(实参高阶函数+返回值高阶函数+糖语法)
用法(套路):
def 函数名1(参数1):
def 函数名2():
新增功能的代码
调用原函数的代码: 参数1()
return 函数名2
说明:
- 函数名1 - 装饰器的名称,根据新增的功能来命名
- 参数1 - 需要添加功能的函数(原函数), 一般命名成f、fn
- 函数名2 - 添加完功能的新函数的函数名, new_f、new_fn
用法(套路):
def 函数名1(参数1):
def 函数名2(*args, **kwarg):
新增功能的代码
原函数的返回值 = 调用原函数的代码: 参数1(*args, **kwarg)
return 原函数的返回值
return 函数名2
练习:写一个装饰器,在函数开始执行的时候打开 'start!'
def start(f):
def new_f(*args, **kwargs):
print('start!')
re = f(*args, **kwargs)
return re
return new_f
@start
def func11():
print('hello world!')
@start
def func22(a, b):
return a*b
func11()
func22(10, 29)
1.有参装饰器
应用场景:如果实现装饰器的功能的时候需要额外的数据,就需要有参装饰器
def 函数名(参数列表):
定义无参装饰器函数
return 无参装饰器函数名
函数名 - 创建装饰器的函数名
参数列表 - 有多个参数看实现装饰器的功能额外需要多少个数据
练习:写个装饰器将原函数的返回值加上指定的数
def add_num(num):
def add(f):
def new_f(*args, **kwargs):
result = f(*args, **kwargs)
if type(result) in (int, float, bool, complex):
return result+num
return result
return new_f
return add
@add_num(10)
def func3(x):
return x*3
print(func3(3))