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

    一、函数的有用信息

    # from functools import wraps
    # def wrapper(f):  # f = func1
    #     @wraps(f)
    #     def inner(*args,**kwargs): #聚合
    #         #args (1,2,3)
    #         '''执行函数之前的相关操作'''
    #         ret = f(*args,**kwargs)  # 打散 1,2,3
    #         '''执行函数之后的相关操作'''
    #         return ret
    #     return inner
    # #
    # # # 函数的执行时,*打散。
    # # # 函数的定义时,*聚合。
    # # @wrapper  # func1 = wrapper(func1)  func1 = inner
    # # def func1(*args): #args (1,2,3)
    # #     print(666)
    # #     return args
    # # print(func1(*[1,2,3]))  # inner(3,5) 打散
    #
    #
    # # def func1():
    # #     """
    # #     此函数是完成登陆的功能,参数分别是...作用。
    # #     :return: 返回值是登陆成功与否(True,False)
    # #     """
    # #     print(666)
    # #     # print(func1.__name__)
    # #     # print(func1.__doc__)
    # #     return True
    # # func1()
    # # print(func1.__name__)
    # # print(func1.__doc__)
    # @wrapper
    # def func1():
    #     """
    #     此函数是完成登陆的功能,参数分别是...作用。
    #     :return: 返回值是登陆成功与否(True,False)
    #     """
    #     print(666)
    #     return True
    # func1()
    # print(func1.__name__)
    # print(func1.__doc__)

    二、带参数的装饰器

    import time
    def timmer(*args,**kwargs):
        def wrapper(f):
            def inner(*args,**kwargs):
                if flag:
                    start_time = time.time()
                    ret = f(*args,**kwargs)
                    time.sleep(0.3)
                    end_time = time.time()
                    print('此函数的执行效率%f' % (end_time-start_time))
                else:
                    ret = f(*args, **kwargs)
                return ret
            return inner
        return wrapper
    
    flag = True
    @timmer(flag,2,3)  # 两步:1,timmer(flag) --> wrapper 2,@wrapper 装饰器
    def func1():
        print(666)
    
    
    @timmer(flag)
    def func2():
        print(777)
    # func1()
    # func2()
    
    # import time
    # flag = True
    # def wrapper(f):
    #     def inner(*args,**kwargs):
    #         if flag:
    #             start_time = time.time()
    #             ret = f(*args,**kwargs)
    #             time.sleep(0.3)
    #             end_time = time.time()
    #             print('此函数的执行效率%f' % (end_time-start_time))
    #         else:
    #             ret = f(*args, **kwargs)
    #         return ret
    #     return inner

    三、多个装饰器装饰一个函数

    def wrapper1(func):  # func ==  f函数名
        def inner1():
            print('wrapper1 ,before func')  # 2
            func()
            print('wrapper1 ,after func')  # 4
        return inner1
    
    def wrapper2(func):  # func == inner1
        def inner2():
            print('wrapper2 ,before func')  # 1
            func()
            print('wrapper2 ,after func')  # 5
        return inner2
    # @wrapper3
    # @wrapper2  #  f = wrapper2(f)  里面的f==inner1  外面的f == inner2
    # @wrapper1  # f = wrapper1(f)   里面的f==函数名f  外面的f == inner1
    # def f():  # 3
    #     print('in f')
    #
    # f()  # inner2()
    
    # @wrapper2
    # @wrapper3  #  f = wrapper2(f)  里面的f==inner1  外面的f == inner2
    # @wrapper1  # f = wrapper1(f)   里面的f==函数名f  外面的f == inner1
    # def f():  # 3
    #     print('in f')
    #
    # f()  #
  • 相关阅读:
    [Err] 1064
    maven项目警告: Using platform encoding (UTF-8 actually) to copy filtered resources
    maven中引入oracle驱动报错Missing artifact com.oracle:ojdbc14:jar:10.2.0.4.0
    springMVC 中url后缀使用html,不能返回json数据,否则会报406错误
    网站并发量的计算方法
    win7旗舰版显示不了文件扩展名
    Java获取mysql数据库元数据
    spring中 context:property-placeholder 导入多个独立的 .properties配置文件
    Could not autowire field: private java.lang.Integer com.taotao.sso.service.impl.UserServiceImpl.SSO_
    linux Nginx服务开机自启
  • 原文地址:https://www.cnblogs.com/qiujie/p/8691645.html
Copyright © 2011-2022 走看看