前言:
程式語言發展的過程中,我們為了提高**利用率,發明了函數語言程式設計。函式將**封裝起來,我們需要用到此功能函式的時候,呼叫一下就可以了。但是使用的過程中,也遇到了一些問題,比如函式實現的功能不夠,或者跟我們要實現的功能有些差別。腫麼辦呢?開啟函式內部**,重新寫?可以嗎?可以!但是這就違背了函數語言程式設計思想的初衷,**沒有重複利用,而且還破壞了原有函式**。怎麼辦?聰明的人類思想的燈泡再次閃亮,咔嚓一聲霹靂響,閉包和裝飾器誕生了!
閉包:
閉包的定義:
舉例:
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包中 init
1 init py定義包的屬性和方法 一般為空檔案,但是必須存在,沒有 init py表明他所在的目錄只是目錄不是包 2 匯入包的時候使用...
Python閉包和裝飾器再複習
在一個外函式中定義了一個內函式,並且內函式用到了外部函式的變數,而且外函式的返回值是內函式的引用,這就構成了一個閉包。 一般情況下,在我們認...
python的包裝和授權
包裝 python為大家提供了標準資料型別,以及豐富的內建方法,其實在很多場景下我們都需要基於標準資料型別來定製我們自己的資料型別,新增 改...