閉包:乙個函式巢狀另乙個函式,外面的函式簡稱為外函式,裡面的為內函式,外函式返回內函式。與普通函式不同的是,普通函式呼叫完後,函式中的區域性變數消失,返回記憶體,而閉包外函式呼叫後,外函式的區域性變數沒有消失,而是繼續留給內函式使用。
1,普通函式
deffn(
):a =
2return a
fn()
print
(a)#輸出報錯name 'a' is not defined
因為a是區域性變數,函式呼叫後消失
2,閉包(函式巢狀,且返回為函式)
deffn(
):a =
1deff1(
):return a
return f1 # 返回f1函式而不是呼叫
b = fn(
)# b即為f1,b總可以訪問fn()中的變數
print
(b()
)# 呼叫f1函式
# 輸出為1
3,閉包的作用
deffn(
):a =[1
]def
f1(x)
:return a
return f1
b = fn(
)print
(b(2))
a =[
]print
(b(3))
# 輸出為[1, 2],[1, 2, 3]
可見a = 並不影響,閉包的作用是建立一些當前函式才可訪問的變數,可以將私有資料隱藏到函式中,只能通過當前函式訪問
4,閉包中例項化的物件
deffn(
):a =
deff1
(x):
return a
return f1
b = fn(
)c = fn(
)d = fn(
)print(id
(b),
id(c)
)#可見b,c為2個不同物件
print
(c(5
),c(6)
)#c為同一物件
print
(b(5
),d(6)
)# b,d為不同物件
# 輸出為2175909442968 2176160163768
#[5, 6] [5, 6] [5] [6]
函式閉包python中的閉包
本文純屬個人見解,是對前面學習的總結,如有描述不正確的地方還請高手指正 單簡說,閉包就是根據不同的置配息信到得不同的結果 再來看看專業的解釋 閉包 closure 是詞法閉包 lexical closure 的簡稱,是引用了由自變數的函式。這個被引用的由自變數將和這個函式一起存在,即使已離開了造創它...
python中閉包 python中的閉包
一 定義 如果在乙個內部函式裡,對在外部作用域 但不是在全域性作用域 的變數進行引用,那麼內部函式就被認為是閉包 closure 這個定義是相對直白的,閉包有三個條件 1.函式巢狀 2,內部函式呼叫外部函式的變數 3.返回內部函式 defa a defb b s a breturnsreturnb ...
python 閉包 Python中的閉包
一 什麼是閉包 在談之前,我們先來說說作用域,變數的作用域無非就兩種 全域性變數和區域性變數。函式內部可以直接讀取全域性變數,但是在函式外部無法讀取函式內部的區域性變數。出於種種原因,我們有時候需要獲取到函式內部的區域性變數。但是,正常情況下,這是辦不到的!只有通過變通的方法才能實現。於是就引入了閉...