Python_裝飾器
Teacher say : 沒有任何一家專面python的公司會不提裝飾器的
os模塊:和操作系統做交互的時候
#裝飾器形成的過程
#裝飾器的作用
#原則: 開發封閉原則
#裝飾器的固定模式
import time
time.sleep(5) #讓程序在執行到這個位置的時候停一會
time.time() #記錄從190年開始到現在 過了多少秒
什麽是裝飾器?
在不修改函數調用方式的情況下, 但是還想在原來的函數前後添加功能
timer就是一個裝飾器函數,只是對一個函數有一些裝飾功能
例:
def timer(f) : #是一個裝飾器函數
def inner(*args,**kwargs) : #*args 傳進去的是一個元組,傳進去一個動態參數 (*args,**kwargs)可以覆蓋所有的動態參數類型
start = time.time()
f(*args,**kwargs) #被裝飾的函數
end = time.time()
print( end - start)
return inner
@timer #語法糖 @裝飾器函數名, 定義在被裝飾函數的上一行
def func() : #被裝飾的函數
time.sleep(0.01)
print(‘裝飾器學習‘)
# func = timer(func) #加入語法糖@timer 此句則省略
func()
#原則: 開放封閉原則
# 開放:對擴展是開放的
# 封閉:對修改是封閉的
# 封版
被裝飾函數的返回值問題:
因為被裝飾函數的 @timer(語法糖),因而被修飾函數地址改變,所以被修飾函數的返回值拿不到,需要在裝飾器最後return 被修飾函數
被裝飾函數傳參問題 : 需要用裝飾帶參數函數的裝飾器
、
總結:裝飾器的固定模式
def wrapper(f) :
def inner(*args,**kwargs) :
#在被裝飾函數之前要做的事
ret = f(*args,**kwargs)
#在被裝飾函數之後要做的事情
return ret
return inner
Python_裝飾器