閉包 裝飾器

2021-09-24 07:12:46 字數 941 閱讀 7244

# 定義乙個函式

def test(number):

# 在函式內部再定義乙個函式,並且這個函式用到了外邊函式的變數,那麼將這個函式及用到的一些變數稱之為閉包

def test_in(number_in):

print("in text_in 函式, number_in is %d" % number_in)

return number + number_in

# 其實這裡返回的就是閉包的結果

return text_in

# 給test函式賦值,這個20就是給引數number

ret = test(20)

# 注意這裡的100其實給引數的number_in

print(ret(100))

# 注意這裡的200其實給引數number_in

print(ret(200))

執行結果:

in test_in 函式, number_in is 100

120in test_in 函式, number_in is 200

220複製**

裝飾器(decorator)功能 1.引入日誌 2.函式執行時間統計 3.執行函式前預備處理 4.執行函式後清理功能 5.許可權校驗等場景 6.快取

#### 第一波 ####

def foo()

print("foo")

foo # 表示是函式

foo() # 表示執行foo函式

#### 第二波 ####

def foo()

print("foo")

foo = lambda x: x + 1

foo() # 執行lambda表示式, 而不再是原來的foo函式, 因為foo這個名字被重新指向另外乙個匿名函式

複製**

閉包 裝飾器

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

閉包,裝飾器

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

閉包 裝飾器

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