裝飾器閉包
裝飾器就是閉包函數的一種應用場景,也是閉包的核心應用場景app
1、什麼是裝飾器函數
裝飾器即爲某個對象添加新功能的一種工具,對象能夠是任意可調用的對象,目前咱們學習的只有函數對象工具
實現裝飾器的方式有多種,可是前提不能修改被裝飾對象的源代碼以及調用方式。即開放封閉原則學習
開放封閉原則對象
開放封閉指的是對修改封閉,對擴展開放文檔
要求在擴展新功能時不能修改源代碼,不能修改調用方式。模板
2、裝飾器的實現import
裝飾器分爲無參裝飾器和有參裝飾器擴展
無參裝飾器的模板
def outer(func):
def wrapper(*args,**kwargs):
# 新功能
res = func(*args,**kwargs)
return res
return wrapper
有參裝飾器的模板
def big_outer(arg):
def outer(func):
def wrapper(*args,**kwargs):
# 新功能
res = func(*args,**kwargs)
return res
return wrapper
return outer
3、裝飾器的語法糖
語法糖就是更簡單的書寫語法,僅僅是爲了簡化書寫
注意:函數必須先定義後使用因此使用語法糖時必須保證裝飾器定義在被裝飾函數之上
4、疊加多個裝飾器
每一個裝飾器都提供了一個擴展的新功能,當咱們要爲同一個函數擴展多個新功能時能夠爲其疊加多個裝飾器
執行從上到下
加載從下到上
5、裝飾器補充:wraps工具
from functools import wraps
提供了一個裝飾器專門用於替換被裝飾函數與裝飾函數的文檔註釋