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

    import time
    from functools import wraps
    
    #不想改变原函数的调用方式,但是还想在原来的函数前后添加功能,选择装饰器
    #timer就是一个装饰器,
    #为了不完全影响原函数引入,warps,
    
    def timer(f):
        @wraps(f)
        def inner(*args,**kwargs):
            starttime = time.time()
            ret = f(*args,**kwargs)
            endtime = time.time()
            print(endtime- starttime)
            return ret
        return inner
    @timer              #语法糖 @装饰器函数名 语法等于   func = timer(func)
    def func(a):         #被装饰的函数
        '''这是一个函数'''
        time.sleep(1)
        print("43243",a)
        return '试试啊看你'
    
    # func = timer(func)
    func('a')
    ass = func('a')
    print(ass)
    print(func.__name__)
    print(func.__doc__)
    
    #原则: 开放闭合原则
    # 开放:对扩展是开放的
    # 封闭:对修改是关闭的
    
    #装饰器模板-------------
    def wrapper(f):
        def inner(*args,**kwargs):
            '''在被装饰函数之前要做的事'''
            ret = f(*args,**kwargs)
            '''在被装饰函数之后要做的事'''
            return ret
        return inner
    
    #多层装饰器修饰一个函数
    
    def wrapper1(func):
        def inner1():
            print('wrapper1,before func')
            ret = func()
            print('wrapper1,after func')
            return ret
        return inner1
    
    def wrapper2(func):
        def inner2():
            print('wrapper2,before func')
            ret = func()
            print('wrapper2,after func')
            return ret
        return inner2
    
    def wrapper3(func):
        def inner3():
            print('wrapper3,before func')
            ret = func()
            print('wrapper3,after func')
            return ret
        return inner3
    @wrapper3
    @wrapper2
    @wrapper1
    def f():
         print('hahah ')
         return '哈哈哈'
    print(f())

    思维导图------执行步骤

  • 相关阅读:
    myeclipse 8.6 安装svn插件
    最简单的jdbc程序
    win7 安装Redis
    面试问题
    在linux/unix中查找大文件
    Java:单例模式的七种写法
    JAVA设计模式之单例模式
    java_String和StringBuffer区别分析
    stringbuffer与stringbuilder的区别?
    String与StringBuffer的区别
  • 原文地址:https://www.cnblogs.com/xiangrikuidebuluo/p/9482195.html
Copyright © 2011-2022 走看看