20210316课 装饰器
装饰器: 本质是一个函数
装饰器 = 实参高阶函数 + 返回值高阶函数 + 糖语法
装饰器是用来给函数添加功能的
语法:
def 装饰器名称(需要添加功能的函数):
def 添加过功能的新函数( * args, * * kwargs):
需要添加功能的函数(* args, * * kwargs)
添加新的功能
return 原函数反回值
return 添加过功能的新函数
from time import time
# 给函数添加运算时间
def count_time(f):
def new_f(*args, **kwargs):
start = time()
result = f(*args, **kwargs)
end = time()
print(f'执行时间:{end - start}')
return result
return new_f
# 练习1:写一个装饰器,给函数添加功能,然后原函数结束的时候打印一个'end'
from functools import reduce
def tag(func1):
def new_func(*args, **kwargs):
result = func1(*args, **kwargs)
print('end')
return result
return new_func
@tag
def func2():
print('hello world!')
func2()
# 练习2:写一个装饰器,将函数的返回值加100。 1 -> 101
def add_value(func1):
def new_func(*args, **kwargs):
result = func1(*args, **kwargs)
if type(result) in (int, float, bool, complex):
return result + 100
return result
return new_func
@add_value # 相当于func22 = add_value(func22)
def func22(n: int): # 求阶乘
result = reduce(lambda x, item: x * item, range(1, n + 1), 1)
return result
print(func22(5)) # 120+100=220