• Python进阶【第九篇】装饰器


    什么是装饰器

    装饰器本身就是函数,并且为其他函数添加附加功能

    装饰器的原则:1.不修改被装饰对象的源代码  2.不修改被装饰对象的调用方式
    装饰器=高阶函数+函数嵌套+闭包

    # res=timmer(test)  #返回的是wrapper的地址 # res()  #执行的是wrapper()

    # test=timmer(test)  #返回的是wrapper的地址 # test()  #执行的是wrapper()

    #  @timmer  就相当于 test=timmer(test)

    # #搭一个高阶函数与函数嵌套的框架
    # def timmer(func):
    #     def wrapper():
    #         print(func)
    #         func()
    #     return wrapper
    import time
    def timmer(func):
        def wrapper():
            start_time=time.time()
            # print(func)
            res=func()#由于执行新获得的test,所以执行wrapper,func作为局部变量,当前没有,便往上一层去找,即test,运行test
            stop_time = time.time()
            print('运行时间是%s' %(stop_time -start_time))
            #wrapper里没有返回值,所以不管怎么改变test,返回值都是none
            return res#由于func运行的就是test,所以将func的值赋给res,再返回res就是test的返回值
        return wrapper
    @timmer#相当于test = timmer(test)#把test函数作为参数传给timmer,执行timmer获取到返回值wrapper,并将其赋给test
    def test():
        time.sleep(3)
        print('test运行完毕')
        return '这是test的返回值'
    
    
    test()#执行新的test,实际就是执行wrapper,这是为了不改变test的调用方式
    
  • 相关阅读:
    s s r 多用户 简单配置
    iptables vsftp timeout
    透明控件的通用解决方案
    一个带有可选自定义框架的透明对话框类
    把你的框架窗口一个影子
    WinForms形成皮肤
    WPF加载启动画面
    酷,半透明和形状对话框与标准的控制Windows 2000及以上
    在MFC应用程序中创建web风格的GUI
    画在WinForms控制
  • 原文地址:https://www.cnblogs.com/bep-feijin/p/8729333.html
Copyright © 2020-2023  润新知