• 自学Python4.2-装饰器


    自学Python之路-Python基础+模块+面向对象
    自学Python之路-Python网络编程
    自学Python之路-Python并发编程+数据库+前端
    自学Python之路-django

    自学Python4.2 - 装饰器

    time.time()         # 获取当前时间
    time.sleep(10)      #让程序在执行到这个位置的时候停10s

    1.简单列子:  计算一段代码的执行时间

    代码1:

    import  time
    print(time.time())
    def func():  # 被装饰的函数
        start = time.time()  # 获取开始的时间
        print('我好喜欢大家啊 ~~')  # 测试时间的代码
        end = time.time()
        print(end-start)
    func()

    代码2:
    由于执行代码的速度太快,没有体现出来结果,这是可以使用 time.sleep(10)  加大代码执行的时间。

    import  time
    print(time.time())
    def func():  # 被装饰的函数
        start = time.time()  # 获取开始的时间
        print('我好喜欢大家啊 ~~')  # 测试时间的代码
        time.sleep(0.01)
        end = time.time()
        print(end-start)
    func()

    代码3: 

    为了让函数func()完全分离出来,现在定义一个新函数timmer(),主要用于计算函数的执行时间(开始的时间,结束时间,执行的函数)

    import  time
    print(time.time())
    def func():  # 被装饰的函数
        time.sleep(0.01)
        print('我好喜欢大家啊 ~~')  # 测试时间的代码
    def timmer(func): #装饰函数
        start = time.time()  # 获取开始的时间
        func()
        end = time.time()
        print(end-start)
    
    timmer(func)  #执行timmer,而且是执行参数func的函数 

    代码4:  装饰器

    其实上面的例子,真正环境下是存在问题的。     应该最终调用func(), 最好调用func()时候实质是调用timmer()

    • 装饰器的作用:不想修改函数的调用方式,但是还想再原来的函数前后添加功能
    • 装饰器的开发原则:开放封闭原则
    • 装饰器的本质:闭包函数
    • 以上例子timmer就是一个装饰器函数,只是对一个函数有一些装饰作用

    函数的闭包定义:

        在函数内部再定义一个函数,并且这个函数用到了外边函数的变量,那么将这个函数以及用到的一些变量称之为闭包。

     

    装饰器本质上就是一个python闭包函数,他可以让其他函数在不需要做任何代码变动的前提下,增加额外的功能,装饰器的返回值也是一个函数对象。

      装饰器的应用场景:比如插入日志,性能测试,事务处理,缓存等等场景。

    import  time
    print(time.time())
    def func():
        time.sleep(0.01)
        print('我好喜欢大家啊 ~~')
    
    def timmer(f):    #装饰器函数
        def inner():
            start = time.time()
            f()   #被装饰的函数
            end = time.time()
            print(end - start)
        return inner
    func = timmer(func)
    func() # 其实执行的是inner()
    

    2.编码原则: 开放封闭原则

    • 开放:对扩展是开放的
    • 封闭:对修改是封闭的(封板)

    3.装饰器---语法糖

    import  time
    print(time.time())
    
    def timmer(f):    #装饰器函数
        def inner():
            start = time.time()
            f()
            end = time.time()
            print(end - start)
        return inner
    @timmer  #语法糖  @装饰器的函数 ,相当于func = timmer(func)
    def func(): #被装饰的函数
        time.sleep(0.01)
        print('我好喜欢大家啊 ~~')
    
    func()
    

  • 相关阅读:
    WinInet中的FTP操作
    CodeIgniter 用户指南 版本 1.7.2
    《Windows Mobile实例开发》电子书提供下载
    程序静默安装的参数总结
    Select a table of certain webpage
    568A
    在IIS 5.1 或IIS6 中配置PHP 的FastCGI模式
    镁天三国育将篇
    镁天三国军事篇
    windows 环境下的 protoc 安装
  • 原文地址:https://www.cnblogs.com/yaoyaojcy/p/10571120.html
Copyright © 2020-2023  润新知