簡單粗暴的講,就是在乙個函式(外部函式)裡面巢狀了另乙個函式(內部函式),外部函式要返回內部函式的引用。下面寫乙個最簡單的閉包例子:
# 定義外部函式
deffunc_out()
:# 定義巢狀的內部函式
deffunc_in()
:print
("hello world"
)# 外部函式返回內部函式的引用
return func_in
# 定義變數func接收外部函式的返回值,即內部函式的引用
func = func_out(
)# 函式的引用 +()即呼叫該函式,這裡的func()實際上是在呼叫內部函式
func(
)# 輸出:hello world
我們通過呼叫外部函式返回的函式引用賦給了func變數,那麼呼叫func()實際上就是在呼叫內部函式,所有如果內部函式需要引數傳遞,我們就要像正常呼叫乙個帶參函式一樣,給他傳遞引數:
def
func_out()
:# 定義形參接收
deffunc_in
(message)
:print
(message)
return func_in
func = func_out(
)# 傳遞實參
func(
'hello world'
)# 輸出:hello world
給外部函式傳遞的引數,內部函式是可以使用的
def
func_out
(name)
:def
func_in
(message)
:print
(name +
':'+ message)
return func_in
# 返回兩個函式引用
tom = func_out(
'tom'
)jack = func_out(
'jack'
)# 分別傳參呼叫
tom(
'hello jack'
)jack(
'hello tom'
)
Python 裝飾器 ,閉包
1 裝飾器 不改變被裝飾的函式情況下附加一些功能 本質是函式,用於裝飾其他函式,附加一些本身所沒有的功能 實質 是乙個函式 引數 是你要裝飾的函式名 並非函式呼叫 返回 是裝飾完的函式名 也非函式呼叫 作用 為已經存在的物件新增額外的功能 特點 不需要對物件做任何的 上的變動 例1 計算執行時長 i...
python裝飾器和閉包
下面幾個部落格有裝飾器的講解,也包含了裝飾器幾種情況的例子,比如說被裝飾的函式帶引數,裝飾器本身帶引數等。理解python中的裝飾器 python裝飾器學習 例子 其實裝飾器跟設計模式中的裝飾器模式基本一樣,就是在已有的函式上新增新的功能,這也是自己對裝飾器的一點簡陋的理解了。下面是自己寫的簡單例子...
python閉包和裝飾器
要理解裝飾器,就要明白閉包 要明白閉包,首先就要從高階函式和作用域說起 說道作用域,一般會談到legb規則。所謂的legb l locals,當前命名空間 區域性作用域 e enclosing,外部函式的命名空間 外部作用域 g global,全域性的命名空間 b bulit in,內建的命名空間平...