• 装饰器


    装饰器的本质 :

      一个闭包函数

    装饰器的功能 :

      在不修改原函数以及其调用方法的基础上对原函数进行功能的添加和扩展

    装饰器原则 :

      开放封闭原则

        对扩展是开放的

        对修改是封闭的

    装饰器的简单版本 :

    import time
     
    def func1():    #原函数
        print('in func1')
     
    def timer(func):    #定义函数(装饰器函数), 将原函数对象作为参数传给新函数
        def inner():
            start = time.time()    #原函数执行之前做一些操作
            func()    #原函数执行
            print(time.time() - start)    #原函数执行之后做一些操作
        return inner    #将内部函数对象返回给外部函数
     
    func1 = timer(func1)    #将自定义的函数(装饰器函数)重新赋值给原函数名
    func1()    #使用赋值之后的函数调用, 函数名没变
    
    
    
    #装饰器的语法糖
    
    import time
    def timer(func):
        def inner():
            start = time.time()
            func()
            print(time.time() - start)
        return inner
     
    @timer   #==> func1 = timer(func1)
    def func1():
        print('in func1')
     
    func1()

    带参数的装饰器 :

    def timer(func):
        def inner(a):
            start = time.time()
            func(a)
            print(time.time() - start)
        return inner
     
    @timer
    def func1(a):
        print(a)
     
    func1(1)
    
    
    
    #接任意参数的装饰器
    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   #==> func1 = timer(func1)
    def func1(a,b):
        print('in func1')
     
    @timer   #==> func2 = timer(func2)
    def func2(a):
        print('in func2 and get a:%s'%(a))
        return 'fun2 over'
     
    func1('aaaaaa','bbbbbb')
    print(func2('aaaaaa'))

    带返回值的装饰器 :

    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'))
  • 相关阅读:
    C语言中的复合类型
    C语言中的函数与指针
    C语言中的循环结构与选择结构
    C语言中的运算符
    C语言中的变量
    毕业论文查重网站
    Protocol and Delegate协议和代理
    NSArray与NSMutableArray 数组与可变数组
    UI复习
    NSString方法与NSMutableString方法
  • 原文地址:https://www.cnblogs.com/dong-/p/9787621.html
Copyright © 2020-2023  润新知