閉包,裝飾器

2021-09-22 12:17:13 字數 643 閱讀 6892

多層函式巢狀,(函式裡面還有定義函式,一般是兩個),往往內層函式會用到外層函式的變數,把內層函式以及外部函式的變數當成乙個特殊的物件,這就是閉包。閉包比物件導向更純淨、更輕量,既有資料又有執行資料的**;比普通函式功能更強大,不僅有**還有資料;

利用閉包的基本原理,對乙個目標函式進行裝飾,即在執行乙個目標函式之前或之後執行一些特定的事情。

通用的裝飾器示例如下:

def set_func(func):

print("—開始進行裝飾")

def call_func(*args, **kwargs):

print("—這是目標函式之前做的事情----") # 如果需要的話

ret = func(*args, ** kwargs) # 拆包

print("—這是目標函式之後做的事情----") # 如果需要的話

return ret # 如果需要有返回值的話可以加上返回值

return call_func

@set_func # 相當於 test1 = set_func(test1)

def test1(*args, **kwargs):

「」「函式內部要做的功能」""

return 「ok」 # 如果需要的話,否則就返回none

閉包 裝飾器

外部函式返回內部函式的引用 內部函式可以直接使用外部函式的環境變數 語法 外部函式通過返回內部函式的引用 內部函式可以直接使用外部函式的 環境變數 自由變數 函式執行時間統計 執行函式前預備處理 執行函式後清理功能 許可權校驗等場景 快取有且只有乙個引數 指向了被裝飾的函式的引用 使用裝飾器 裝飾器...

閉包 裝飾器

定義乙個函式 def test number 在函式內部再定義乙個函式,並且這個函式用到了外邊函式的變數,那麼將這個函式及用到的一些變數稱之為閉包 def test in number in print in text in 函式,number in is d number in return nu...

閉包 裝飾器

閉是封閉 函式中的函式 包是包含 該內部函式對外部函式作用域而非全域性作用域變數的引用。閉包 def foo print in foo def bar print in bar 1.直接執行內部函式報錯 bar 2.先執行外部函式,再執行內部函式,依然會報錯 foo bar 由於作用域的問題,函式內...