zoukankan      html  css  js  c++  java
  • 0402函数的有用信息 ,带参数的装饰器 , 多个装饰器装饰一个函数

    一、函数的有用信息

    def func():
        '''
    此函数的作用是拯救世界
    '''
        print(666)
        return 666
    func()
    print(func.__name__)   #调出函数名
    print(func.__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()

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

    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()
     
  • 相关阅读:
    SQLite的SQL语法
    C/C++中各种类型int、long、double、char表示范围(最大最小值)
    君子性非异也,善假于物也
    简单工厂模式
    Linux下通配符总结
    Readprocessmemory使用方法
    C++ 清空消息队列
    一周自学动态站点设计
    iOS 8.0正式公布啦
    What is the difference between JRE,JVM and JDK?
  • 原文地址:https://www.cnblogs.com/Mr-Murray/p/8692268.html
Copyright © 2011-2022 走看看