• python装饰器(一)


    装饰器

    import time
    ##现在有一个函数f,并且已经部署在生产环境中了
    
    ##函数f
    # def f():
    #     time.sleep(2)
    #     print("执行f........")
    #f()
    
    ##挨千刀的产品够有需要添加新需求
    ##添加需求,假设为算出函数f的执行时间
    
    ##法1.在原函数修改功能
    # def f():
    #     start=time.time()
    #
    #     ##原来的功能开始
    #     time.sleep(2)
    #     print("执行f........")
    #     ##原来的功能结束
    #
    #     end=time.time()
    #     print("执行消耗时间%s"%(end-start))
    #f()
    ###缺点:违背了开放封闭原则(对修改封闭,对扩展开放),代码已经部署在生产环境就不应该直接修改它
    
    ##法2.创建新函数,并将函数f作为参数传入新函数,调用
    # def show_time(func):
    #     start = time.time()
    #     ##执行f
    #     func()
    #     end = time.time()
    #     print("执行消耗时间%s" % (end - start))
    # show_time(f)
    ###缺点:改变了调用方式,团队中其他人员使用时也必须按照你写的函数调用
    ###到这里,正常的思路是:把一个函数重新赋值给f,这样调用时就可以直接用f(),但是f=show_time(f)是在调用show_time,没有返回值,所以f==None,
    
    ##法3.优化show_time,使其返回值为一个函数
    def show_time(func):
        def inner():
            start = time.time()
            ##执行f
            func()
            end = time.time()
            print("执行消耗时间%s" % (end - start))
        return inner
    # f=show_time(f)
    # f()
    ###python装饰器语法,在原函数f上添加@show_time
    @show_time
    def f():
        time.sleep(2)
        print("执行f........")
    ####等价于  f=show_time(f)
    f()
    
  • 相关阅读:
    linux 用户与用户组
    linux 用户管理、权限管理
    linux服务与进程
    linux 磁盘阵列
    linux 文件系统 磁盘分区 格式化
    linux shell基础
    Linux网络设置
    DNS域名服务器配置
    Arduino 各种模块篇 摇杆模块
    Arduino 不同Arduino衍生板子的问题
  • 原文地址:https://www.cnblogs.com/paopaolee/p/2017105924_lee.html
Copyright © 2020-2023  润新知