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
  • 相关阅读:
    Android4.2以及最新SDK的尝鲜使用
    UVA 1524
    StringTokenizer类的使用
    Tuxedo入门学习
    ReviewBoard安装和配置札记
    一步一步写算法(之单向链表)
    腾讯2014年实习生招聘笔试面试经历
    二路单调自增子序列模型【acdream 1216】
    [置顶] c# 验证码生成
    Android Service 服务(一)—— Service
  • 原文地址:https://www.cnblogs.com/leo-tail-x/p/10066998.html
Copyright © 2011-2022 走看看