1. 程式人生 > >4-2日裝飾器,帶參數的裝飾器

4-2日裝飾器,帶參數的裝飾器

tar 相關操作 rom 裝飾器 有用 緩存 false war cto

1,函數的有用信息

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

2,裝飾器的應用場景:比如插入日誌,性能測試,事務處理,緩存等等場景。

def func1():
    """
    此函數是什麽功能,參數分別是什麽作用。
    :return: 返回值是登錄成功與否(True,False)
    """
    print(999)

    return True

func1()
print(func1.__name__)
print(func1.__doc__)
def func1():
    """
    此函數是完成什麽的功能,參數分別是。。。作用。
    :return: 返回值是登錄成功與否(True,False)
    """
    print(666)


    print(func1.__name__
) print(func1.__doc__) return True func1()

3,裝飾器帶多個參數

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()

4,多個裝飾器裝飾一個參數

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()

4-2日裝飾器,帶參數的裝飾器