閉包 裝飾器

2021-08-19 19:01:31 字數 709 閱讀 8367

外部函式返回內部函式的引用

內部函式可以直接使用外部函式的環境變數

語法:外部函式通過返回內部函式的引用

內部函式可以直接使用外部函式的-環境變數 自由變數

函式執行時間統計

執行函式前預備處理

執行函式後清理功能

許可權校驗等場景

快取有且只有乙個引數 -指向了被裝飾的函式的引用

使用裝飾器@裝飾器名 等價於 f1=yanzheng(1)

# 裝飾器函式特點 新增乙個功能根據引數flag引數不同 '1' 使用整數輸出時間差

# 使用的是其他資料 以浮點數輸出時間

defget_run_time

(flag):

defgettime

(func):

definner

(*args, **kwargs):

begin = time.time()

ret = func()

end = time.time()

if flag == '1':

print("函式執行花費了%d s" % int(end-begin))

else:

print("函式執行花費了%f s" % (end-begin))

return ret

return inner

return gettime

閉包,裝飾器

多層函式巢狀,函式裡面還有定義函式,一般是兩個 往往內層函式會用到外層函式的變數,把內層函式以及外部函式的變數當成乙個特殊的物件,這就是閉包。閉包比物件導向更純淨 更輕量,既有資料又有執行資料的 比普通函式功能更強大,不僅有 還有資料 利用閉包的基本原理,對乙個目標函式進行裝飾,即在執行乙個目標函式...

閉包 裝飾器

定義乙個函式 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 由於作用域的問題,函式內...