閉包/裝飾器
阿新 • • 發佈:2018-12-11
1.什麼是閉包?
多層函式巢狀,(函式裡面還有定義函式,一般是兩個),往往內層函式會用到外層函式的變數,把內層函式以及外部函式的變數當成一個特殊的物件,這就是閉包。閉包比面向物件更純淨、更輕量,既有資料又有執行資料的程式碼;比普通函式功能更強大,不僅有程式碼還有資料;
2.匿名函式、普通函式、閉包、面向物件的區別?
1). 匿名函式能夠完成基本的簡單功能,傳遞是這個函式的引用 只有功能。
2). 普通函式能夠完成較為複雜的功能,傳遞是這個函式的引用 只有功能。
3). 閉包能夠將較為複雜的功能,傳遞是這個閉包中的函式以及資料,佔用資源比較小。
4). 物件能夠完成最為複雜的功能,傳遞是資料+功能,但佔用大量空間,浪費資源。
3.什麼是裝飾器?
利用閉包的基本原理,對一個目標函式進行裝飾,即在執行一個目標函式之前、之後執行一些特定的事情。
通用的裝飾器示例如下:
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
|