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