裝飾器
python裝飾器本質上就是一個函數碴巾,它可以讓其他函數在不需要做任代
碼變動的前提下增加額外的功能,裝飾器的返回值也是一個函數對象(函數的指針)喻喳。
實質: 是一個函數
參數:是你要裝飾的函數名(并非函數調用)
返回:是裝飾完的函數名(也非函數調用)
作用:為已經存在的對象添加額外的功能
特點:不需要對對象做任何的代碼上的變動
裝飾器作用
裝飾器最大的作用就是對于我們已經寫好的程序,我們可以抽離出一些雷同的代碼組建多個特定功能的裝飾器啃炸,這樣我們就可以針對不同的需求去使用特定的裝飾器泰偿,這時因為源碼去除了大量泛化的內容而使得源碼具有更加清晰的邏輯俩垃。
函數的函數裝飾器
import time
def decorator(func):
def wrapper(*args, **kwargs):
start_time = time.time()
func()
end_time = time.time()
print(end_time - start_time)
return wrapper
@decorator
def func():
time.sleep(0.8)
func() # 函數調用
# 輸出:0.800644397735595
類方法的函數裝飾器
import time
def decorator(func):
def wrapper(me_instance):
start_time = time.time()
func(me_instance)
end_time = time.time()
print(end_time - start_time)
return wrapper
class Method(object):
@decorator
def func(self):
time.sleep(0.8)
p1 = Method()
p1.func() # 函數調用
通用裝飾器
def aa(fun):
def inner(*args,**kwargs):
print('啦啦')
return fun(*args,**kwargs)
return inner
有參通用裝飾器
def w(a):
def w1(fun):
def inner(*args,**kwargs):
if a == 1 :
print('驗證1')
elif a == 2:
print('驗證2')
return fun(*args,**kwargs)
return inner
retrn w1
@w(1)
def play (a,b):
print('現在是下午%d點%d分'%(a,b))
play(3,30)
@w(2)
def play1():
print('啦啦啦')
play1()