python中的閉包問題

基礎知識回顧

1.定義函數時,形參並不佔用內存存儲單元。進行函數調用時,函數的形參被臨時分配內存單元。調用結束時形參佔用的內存存儲單元被釋放。

2.調用函數時,是會爲函數分配臨時函數空間,但函數的局部變量生命週期是隻在函數運行時,一旦完成函數調用局部變量就被釋放了。所以函數多次調用是在不同的函數空間調用,不會相互影響。

3.在執行函數的時候會先給函數體開闢一段內存來存貯函數的操作,執行完後函數的變量會釋放,函數體(也就是函數代碼)不會釋放,一直在代碼段中,以後要調用的時候還可以進行調用。返回的函數值會放在你定義好的變量中,如果沒有接收返回值,那麼該返回值會被丟棄。

4.析構函數(destructor) 與構造函數相反,當對象結束其生命週期,如對象所在的函數已調用完畢時,系統自動執行析構函數。析構函數往往用來做“清理善後” 的工作(例如在建立對象時用new開闢了一片內存空間,delete會自動調用析構函數後釋放內存)。

閉包:高階函數除了可以接受函數作爲參數外,還可以把函數作爲結果值返回。

閉包就是能夠讀取其他函數內部變量的函數。閉包可以理解成“定義在一個函數內部的函數“。在本質上,閉包是將函數內部和函數外部連接起來的橋樑。

python的閉包和延遲綁定

def multipliers():
    return [lambda x : i*x for i in range(4)]
print ([m(2) for m in multipliers()] )

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章