• 装饰器


    一个简单的装饰器

    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
  • 相关阅读:
    (转) c/c++调用libcurl库发送http请求的两种基本用法
    (转)unordered_map与map的对比(C++11新特性)
    libevent简单介绍
    libevent入门
    日期转换成字符串
    LinkServer
    GridView小记
    SoapHeader
    Credential
    Notepad++ Emmet/Zen coding插件的安装
  • 原文地址:https://www.cnblogs.com/leo-tail-x/p/10066998.html
Copyright © 2020-2023  润新知