前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >五、python学习笔记-函数-装饰器(二)

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

原创
作者头像
堕落飞鸟
发布2022-01-13 09:04:15
1690
发布2022-01-13 09:04:15
举报
文章被收录于专栏:飞鸟的专栏
代码语言: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)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档