• day11_装饰器


    装饰器的本质:一个闭包函数

    装饰器的功能:在不修改原函数及其调用方式的情况下对原函数功能进行扩展

    import time
    
    def func():
        time.sleep(0.01)
        print("加油")
    def timer(f):             #装饰器函数
        def inner():
            start = time.time()
            f()          #被装饰函数
            end = time.time()
            print(end - start)
        return inner
    
    func = timer(func)
    func()
    #不修改原有的函数调用方式,但原有函数前后添加功能
    #timer就是一个装饰器函数只是对一个函数有一些装饰作用

     语法糖:

    import time
    def timer(func):
        def inner():
            start = time.time()
            func()
            print(time.time() - start)
        return inner
    
    @timer   #==> func1 = timer(func1)        语法糖:@装饰器的名字
    def func1():                              被装饰的函数
        time.sleep(0.1)
        print('in func1')
    
    
    func1()
    带有返回值
    import time def timer(func): def inner(
    *args,**kwargs): start = time.time() re = func(*args,**kwargs) print(time.time() - start) return re return inner @timer #==> func2 = timer(func2) def func2(a): print('in func2 and get a:%s'%(a)) return 'fun2 over' func2('aaaaaa') print(func2('aaaaaa')) #输出返回值
    # 装饰器模式
    def warpper(func):
        def inner(*args, **kwargs):
            re1 = func(*args, **kwargs)  # 修饰函数
            return re1
    
        return inner  # 无括号
    
    
    @warpper  # 等价于  func = warpper(func)---返回值是 inner
    def func(*args, **kwargs):
        print("123")
    
    
    re1 = func()  # 函数inner---返回值是re1
  • 相关阅读:
    Helpers Overview
    Validation
    Support Facades
    Session Store
    位运算(参考百科)
    开源项目_可能使用到的开源项目集合
    秒杀系统架构分析与实战(转)
    shell命令之根据字符串查询文件对应行记录
    MySQL做为手动开启事务用法
    spring 加载bean过程源码简易解剖(转载)
  • 原文地址:https://www.cnblogs.com/wzc27229/p/10992053.html
Copyright © 2020-2023  润新知