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

    一个简单的装饰器

    def wrapper(func):
        def inner(*args, **kwargs):
            # 执行被装饰函数之前进行的操作
            ret = func(*args, **kwargs)
            # 执行被装饰函数之后进行的操作
            return ret
        return inner
    
    
    @wrapper
    def func():
        print('func')

    func()

    装饰器带参数

    def outer(flag):
        def timer(func):
            def inner(*args, **kwargs):
                if flag:
                    print(time.time())
                    ret = func(*args, **kwargs)  # 原来的函数
                else:
                    ret = func(*args, **kwargs)  # 原来的函数
                return ret
            return inner
        return timer
    
    @outer(True)  # func1 = timer(func1)  inner
    def func1():
        print('func1')

    多个装饰器装饰同一个函数

     1 def wrapper1(func):
     2     def inner(*args, **kwargs):
     3         print('wrapper1 前')  # 2
     4         ret = func(*args, **kwargs)
     5         print('wrapper1 后')  # 4
     6         return ret
     7     return inner
     8 
     9 def wrapper2(func):
    10     def inner(*args, **kwargs):
    11         print('wrapper2 前')  # 1
    12         ret = func(*args, **kwargs)
    13         print('wrapper2 后')  # 5
    14         return ret
    15     return inner
    16 
    17 @wrapper2  # func1 = wrapper2(func1)  wrapper2.inner   func=wrapper1.inner
    18 @wrapper1  # func1 = wrapper1(func1)  wrapper1.inner   func=func1
    19 def func1():
    20     print('func1')  # 3
    21     return 'func1的返回值'
    22 
    23 print(func1())  # 6

    装饰器修复技术

    1 from functools import wraps
    2 def timer(func):
    3     @wraps(func)
    4     def inner():
    5         print(time.time())
    6         ret = func()  # 原来的函数
    7         return ret
    8     return inner
  • 相关阅读:
    今日大跌!
    web servers
    ASP.NET2.0缓存机制
    赚钱的总是史玉柱?
    asp.net速查手册
    为伊消得人憔悴,我的2007成就难有,内心彷徨
    success
    失守4600点
    Linux下chkconfig命令详解
    FTP批处理下载木马
  • 原文地址:https://www.cnblogs.com/leo-tail-x/p/10066998.html
Copyright © 2011-2022 走看看