# 装饰器练习
"""要求
1、功能函数实现两个整形元素的加法,并且sleep 2秒
2、通过装饰器打印功能函数执行时间
3、装饰器根据参数判断是否记录日志
"""
"""分析
1、前两个要求在之前已经实现过,不再说明。
2、第三个需求需要我们传递一个标志位flag,装饰器本质@Bar 等于foo=Bar(foo),是没有位置来传递参数的。
又因为开放封闭原则,我们也不能修改功能函数。
所以我们需要再嵌套一层函数,来接收传递参数,然后返回函数Bar,实际上相当于@Bar加上传递参数
"""
import time
def logger(flag):
def bar(foo):
def inter(a, b):
start_time = time.time()
foo(a, b)
end_time = time.time()
print('执行时间{}'.format(end_time - start_time))
if flag == 'Y':
print('记录日志')
return inter
return bar
@logger('Y') # 因为函数logger的返回值是Bar,实际上就是先执行函数logger(因为logger后面是有‘()’的,是调用该函数),设置flag = ‘y’,然后执行@Bar
def foo(a, b):
time.sleep(2)
print(a + b)
foo(3, 4)