1. 程式人生 > >4、python基礎——裝飾器

4、python基礎——裝飾器

在這裡插入圖片描述

def log(func):
    def my_time(a,b): 
        def wrapper(*args): 
            print(time.asctime())
            s_time = time.time()
            temp = func(a,b)  
            e_time = time.time()
            print(e_time-s_time)
            return 'OK'
        return wrapper()
    return my_time


@log
def f(x,y):
    print("執行程式")
    time.sleep(1)
    print(x+y)

n = f(1,2)
print(n)
def my_time(func):
    def wrapper():
        s_time = time.time()
        func()
        e_time = time.time()
        print(e_time-s_time)
    return wrapper

#執行的時候的是脫衣服,先脫外層,再脫內層
#@log  #先裝飾,日至  外層衣服
@my_time  #後裝飾,效能  內層衣服
def f():
    print('i am f')
    time.sleep(3)

f()
執行結果:
i am f
3.0001718997955322
#閉包:內層函式訪問外層函式的變數
#裝飾器:本質是個函式
#作用:用來裝飾其他函式,給其他的函式附加新的功能
#原則:1、不能修改被裝飾的函式的原始碼
#         2、不能改變被裝飾函式的呼叫方式

#應用場景:插入日至,效能測試,處理事務
#例:測試函式的執行時間
import time

def f():
    print('i am f')
    time.sleep(2)

def new_f():
     s_time = time.time() #開始時間
     f()
     e_time = time.time() #結束時間
     print('耗時:{}'.format(e_time-s_time))

new_f()