zoukankan      html  css  js  c++  java
  • python装饰器

    import functools
    
    
    # 在代码运行期间动态增加功能的方式,称之为“装饰器”,装饰器就是返回函数的高阶函数
    
    # 不带参数的装饰器
    def log1(func):
        # 修正装饰器的name指向
        @functools.wraps(func)
        def wrapper(*args, **kw):
            print(func.__name__, '我要插入一个日志')
            return func(*args, **kw)
        return wrapper
    
    # 带参数的装饰器 中间再加一层函数包裹
    def log2(str):
        def d(func):
            @functools.wraps(func)
            def wrapper(*args, **kw):
                print('%s %s():' % (str, func.__name__))
                return func(*args, **kw)
            return wrapper
        return d
    
    def log3(str):
        def d(func):
            # @functools.wraps(func)
            def wrapper(*args, **kw):
                print('%s %s():' % (str, func.__name__))
                return func(*args, **kw)
            return wrapper
        return d
    
    # 相当于 log1(hello1)
    @log1
    def hello1():
        print('hello world1')
    
    # 相当于log2(111)(hello2)
    @log2('111')
    def hello2():
        print('hello world2')
    
    @log3('222')
    def hello3():
        print('hello world3')
    
    hello1() # 装饰器打印hello1 我要插入一个日志  函数本身打印hello world1
    
    print(hello1.__name__)
    print(hello2.__name__) # hello2
    print(hello3.__name__) # wrapper 因为没有 @functools.wraps(func)修改指向
    

      

  • 相关阅读:
    SUM游戏
    指针入门(四)
    MSP430 G2553 寄存器列表与引脚功能
    MSP430G2553头文件解析
    修复Kaos的中文显示
    VIM使用技巧3
    VIM使用技巧2
    Java学习之路(3)
    指针入门(三)
    共享VIM配置文件
  • 原文地址:https://www.cnblogs.com/leyi/p/11672774.html
Copyright © 2011-2022 走看看