Python 裝飾器(1)閉包

2021-09-27 03:16:00 字數 1134 閱讀 3229

簡單粗暴的講,就是在乙個函式(外部函式)裡面巢狀了另乙個函式(內部函式),外部函式要返回內部函式的引用。下面寫乙個最簡單的閉包例子:

# 定義外部函式

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,內建的命名空間平...