首页
学习
活动
专区
圈层
工具
发布
30 篇文章

五、python学习笔记-函数-装饰器(二)

代码语言:javascript
复制
# 装饰器练习
"""要求
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)
下一篇
举报
领券