學習python(九) 閉包函式與lamba

2021-10-18 19:06:53 字數 1019 閱讀 6016

閉包,又稱閉包函式或者閉合函式,其實和前面講的巢狀函式類似,不同之處在於,閉包中外部函式返回的不是乙個具體的值,而是乙個函式。一般情況下,返回的函式會賦值給乙個變數,這個變數可以在後面被繼續執行呼叫。閉包比普通的函式多了乙個 __closure__ 屬性,該屬性記錄著自由變數的位址。當閉包被呼叫時,系統就會根據該位址找到對應的自由變數,完成整體的函式呼叫。

使用閉包,可以讓程式變得更簡潔易讀。

例如:現在要寫乙個求冪函式

def power(number):

def powermath(base):

return base**number

return powermath

cube = power(3)

print(cube(5),"of the address is",cube.__closure__)

輸出為:

外部函式power() 的返回值是函式 powermath(),而不是乙個具體的數值。顯示的內容是乙個 int 整數型別,這就是 cube中自由變數 number的初始值。還可以看到,__closure__ 屬性的型別是乙個元組,這表明閉包可以支援多個自由變數的形式。

對於定義乙個簡單的函式,python 還提供了另外一種方法,即使用本節介紹的 lambda 表示式。lambda 表示式,又稱匿名函式,常用來表示內部僅包含 1 行表示式的函式。如果乙個函式的函式體僅有 1 行表示式,則該函式就可以用 lambda 表示式來代替。

lambda 表示式的語法格式如下:name = lambda [list] : 表示式。其中,定義 lambda 表示式,必須使用 lambda 關鍵字;[list] 作為可選引數,等同於定義函式是指定的引數列表;value 為該表示式的名稱。

可以這樣理解 lambda 表示式,其就是簡單函式(函式體僅是單行的表示式)的簡寫版本。相比函式,lamba 表示式具有以下  2 個優勢:

python函式巢狀閉包 閉包與巢狀函式

沒有區別,因為沒有閉合函式,不是真的。有closures,但這一術語指的是在外部和內部範圍中儲存變數的技術。只剩下巢狀函式。在 巢狀函式只是在另乙個函式內部定義的函式 def outer def inner 當outer 定義了乙個inner 然後也使用的名稱,則該變數名稱為閉包單元,儲存在inne...

Python 函式物件與閉包

函式物件指的是函式可以被當做 資料 來處理,具體可以分為四個方面的使用。def index print from index a index a def foo x,y,func print x,y func def bar print from bar foo 1,2,bar 1 2 from b...

python閉包函式

python函式閉包 closure 比較抽象,在函式式程式設計中運用地比較多,通俗點就是子函式 內嵌函式 呼叫上層函式 閉包函式 的變數,且上層函式 閉包函式 接收的變數會儲存在子函式 內嵌函式 的變數中可以供子函式 內嵌函式 呼叫 概念很抽象,但是實現的例子還是比較容易理解的,這裡記住實現函式閉...