zoukankan      html  css  js  c++  java
  • 装饰器-示例

    !/usr/bin/env python

    -- coding: utf-8 --

    @Time : 2018/6/3 0003 11:47

    @Author : Anthony.Waa

    @Site :

    @File : test.py

    @Software: PyCharm

    示例1:

    带状态的装饰器

    from functools import wraps
    import time
    def timeout(flag1):
        def timmer(f):
            '''
            此函数用于显示被装饰函数的运行效率,打印运行市场即为正确
            :param f: f = JD()
            :return:
            '''
            @wraps(f)
            def inner(*args,**kwargs):
                if flag1:
                    start_time = time.time()
                    ret = f(*args,**kwargs)
                    end_time = time.time()
                    print('此函数的执行效率%s' % (end_time - start_time))
                    return ret
                else:
                    ret = f(*args, **kwargs)
                    return ret
            return inner
        return timmer
    
    
    flag = False
    @timeout(flag)
    def JD():
        '''
        此处为被装饰函数
        :return:
        '''
        time.sleep(0.3)
        print('非常复杂......')
        return 666
    
    JD()
    

    示例2

    带参数的装饰器

    from functools import wraps
    import time
    def timeout(flag1):
        def timmer(f):
            '''
            此函数用于显示被装饰函数的运行效率,打印运行市场即为正确
            :param f: f = JD()
            :return:
            '''
            @wraps(f)
            def inner(*args,**kwargs):
                if flag1:
                    start_time = time.time()
                    ret = f(*args,**kwargs)
                    end_time = time.time()
                    print('此函数的执行效率%s' % (end_time - start_time))
                    return ret
                else:
                    ret = f(*args, **kwargs)
                    return ret
            return inner
        return timmer
    
    
    
    @timeout('京东')
    def JD():
        '''
        此处为被装饰函数
        :return:
        '''
        time.sleep(0.3)
        print('我是京东......')
        return 666
    
    @timeout('淘宝')
    def taobao():
        '''
        此处为被装饰函数
        :return:
        '''
        time.sleep(0.3)
        print('我是淘宝......')
        return 666
    JD()
    taobao()
    

    示例3:

    多个装饰器装饰一个函数

    import time
    def wrapper1(func1):  # func = inner2
        def inner1():
            print('wrapper1 ,before func') # 1
            func1()  # inner2
            print('wrapper1 ,after func')   # 7
        return inner1
    
    
    def wrapper2(func2):  # func2 = inner3
        def inner2():
            print('wrapper2 ,before func')  # 2
            func2()  # inner3
            print('wrapper2 ,after func')  # 6
        return inner2
    
    def wrapper3(func3):  # func3 = index()
        def inner3():
            print('wrapper3 ,before func')  # 3
            func3()  # index()
            print('wrapper3 ,after func')  # 5
        return inner3
    
    
    
    @wrapper1 # index = wrapper1(inner2)
    @wrapper2 # index = wrapper2(inner3)
    @wrapper3 # index = wrapper3(index)
    def index():
        print('in my heart') # 4
        time.sleep(0.3)
    
    
    
    index()
  • 相关阅读:
    动态规划专题(二)——树形DP
    动态规划专题(一)——状压DP
    位运算相关(二)——位运算的简单变换操作
    位运算相关(一)——位运算学习笔记
    2018.10.05 TOPOI提高组模拟赛 解题报告
    【BZOJ1088】[SCOI2005] 扫雷Mine(分类讨论)
    【洛谷1273】有线电视网(树上背包)
    【洛谷2264】情书(字符串水题)
    【洛谷4287】[SHOI2011] 双倍回文(Manacher算法经典题)
    【洛谷2051】[AHOI2009] 中国象棋(烦人的动态规划)
  • 原文地址:https://www.cnblogs.com/ipyanthony/p/9129450.html
Copyright © 2011-2022 走看看