3 回答

TA貢獻(xiàn)1801條經(jīng)驗 獲得超8個贊
一個拉姆達(dá)只是一個匿名函數(shù)-沒有名字定義的函數(shù)。在某些語言中,例如Scheme,它們等同于命名函數(shù)。實際上,函數(shù)定義被重寫為在內(nèi)部將lambda綁定到變量。在其他語言中,如Python,它們之間存在一些(相當(dāng)不必要的)區(qū)別,但它們的行為方式相同。
甲閉合是任何功能關(guān)閉以上的環(huán)境中,它被定義。這意味著它可以訪問不在其參數(shù)列表中的變量。例子:
def func(): return hdef anotherfunc(h): return func()
這將導(dǎo)致錯誤,因為func
未關(guān)閉環(huán)境anotherfunc
- h
未定義。func
只關(guān)閉全球環(huán)境。這將有效:
def anotherfunc(h): def func(): return h return func()
因為在這里func
定義anotherfunc
,并且在python 2.3和更高版本(或者像這樣的一些數(shù)字)中,當(dāng)它們幾乎使閉包正確時(變異仍然不起作用),這意味著它關(guān)閉了 anotherfunc
環(huán)境并且可以訪問內(nèi)部的變量。它。在Python 3.1+,突變使用時也工作的nonlocal
關(guān)鍵詞。
另一個重要的觀點 - 即使不再被評估,func
也會繼續(xù)關(guān)閉anotherfunc
環(huán)境anotherfunc
。此代碼也適用:
def anotherfunc(h): def func(): return h return funcprint anotherfunc(10)()
這將打印10。
正如您所注意到的,這與lambda無關(guān)- 它們是兩個不同的(雖然相關(guān))概念。
添加回答
舉報