python中閉包和裝飾器

2022-03-14 12:22:33 字數 1217 閱讀 9912

前言:

程式語言發展的過程中,我們為了提高**利用率,發明了函式式程式設計。函式將**封裝起來,我們需要用到此功能函式的時候,呼叫一下就可以了。但是使用的過程中,也遇到了一些問題,比如函式實現的功能不夠,或者跟我們要實現的功能有些差別。腫麼辦呢?開啟函式內部**,重新寫?可以嗎?可以!但是這就違背了函式式程式設計思想的初衷,**沒有重複利用,而且還破壞了原有函式**。怎麼辦?聰明的人類思想的燈泡再次閃亮,咔嚓一聲霹靂響,閉包和裝飾器誕生了!

閉包:

閉包的定義:

舉例:

def

wai(x):

defnei():

print

(x)

return

neia = wai(3)()

在這個函式中,內部函式nei使用了外部函式的變數x,外部函式wai將內部函式作為返回值返回了。結果是3。a = wai(3)實際上是等同於a = nei ,後面**括號,才是呼叫了函式nei。這就是為什麼是a = wai(3)()

閉包知道咋回事了,那麼它實際意義是啥呢?裝飾器就是它的實際應用

裝飾器:

裝飾器本身是乙個閉包,只不過外部函式的變數變成了乙個函式名。

舉例:

#

定義裝飾器

defzhuang_xiu(fun):

defnei():

print('吊頂'

) fun()

print('地毯'

)

return

nei#

要被裝飾器裝飾的函式

defnew_house():

print('新房'

)print('

使用裝飾器前:')

new_house()

#使用裝飾器

print('

使用裝飾器後:')

@zhuang_xiu

defnew_house():

print('新房'

)new_house()

執行結果:

使用裝飾器前:

新房使用裝飾器後:

吊頂新房

地毯

python裝飾器和閉包

下面幾個部落格有裝飾器的講解,也包含了裝飾器幾種情況的例子,比如說被裝飾的函式帶引數,裝飾器本身帶引數等。理解python中的裝飾器 python裝飾器學習 例子 其實裝飾器跟設計模式中的裝飾器模式基本一樣,就是在已有的函式上新增新的功能,這也是自己對裝飾器的一點簡陋的理解了。下面是自己寫的簡單例子...

python閉包和裝飾器

要理解裝飾器,就要明白閉包 要明白閉包,首先就要從高階函式和作用域說起 說道作用域,一般會談到legb規則。所謂的legb l locals,當前命名空間 區域性作用域 e enclosing,外部函式的命名空間 外部作用域 g global,全域性的命名空間 b bulit in,內建的命名空間平...

python 閉包和裝飾器

閉包的寫法,兩層函式的巢狀,外部函式返回內部函式的引用,外層函式都帶引數 def 外層函式的名稱 引數 def 內層函式的名稱 pass return 內層函式的引用 def set fun func func 254 defcall fun nonlocal func 修改外層函式的值,並且內部函...