亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

'閉包'和'lambda'有什么區別?

'閉包'和'lambda'有什么區別?

'閉包'和'lambda'有什么區別?有人能解釋一下嗎 我理解它們背后的基本概念,但我經??吹剿鼈兓Q使用,我感到困惑?,F在我們在這里,它們與常規功能有什么不同?
查看完整描述

3 回答

?
蝴蝶刀刀

TA貢獻1801條經驗 獲得超8個贊

一個拉姆達只是一個匿名函數-沒有名字定義的函數。在某些語言中,例如Scheme,它們等同于命名函數。實際上,函數定義被重寫為在內部將lambda綁定到變量。在其他語言中,如Python,它們之間存在一些(相當不必要的)區別,但它們的行為方式相同。

閉合是任何功能關閉以上環境中,它被定義。這意味著它可以訪問不在其參數列表中的變量。例子:

def func(): return hdef anotherfunc(h):
   return func()

這將導致錯誤,因為func關閉環境anotherfunch未定義。func只關閉全球環境。這將有效:

def anotherfunc(h):
    def func(): return h
    return func()

因為在這里func定義anotherfunc,并且在python 2.3和更高版本(或者像這樣的一些數字)中,當它們幾乎使閉包正確時(變異仍然不起作用),這意味著它關閉了 anotherfunc環境并且可以訪問內部的變量。它。在Python 3.1+,突變使用時也工作nonlocal關鍵詞。

另一個重要的觀點 - 即使不再被評估,func也會繼續關閉anotherfunc環境anotherfunc。此代碼也適用:

def anotherfunc(h):
    def func(): return h
    return funcprint anotherfunc(10)()

這將打印10。

正如您所注意到的,這與lambda無關- 它們是兩個不同的(雖然相關)概念。


查看完整回答
反對 回復 2019-07-25
  • 3 回答
  • 0 關注
  • 861 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號