你能解釋一下閉包(因?yàn)樗鼈兣cPython有關(guān))嗎?我一直在閱讀很多關(guān)于閉包的內(nèi)容,我認(rèn)為我理解它們,但是沒有為自己和他人蒙上陰影,我希望有人可以盡可能簡(jiǎn)潔明了地解釋閉包。我正在尋找一個(gè)簡(jiǎn)單的解釋,可以幫助我理解我想要使用它們的地點(diǎn)和原因。
3 回答

BIG陽
TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個(gè)贊
它很簡(jiǎn)單:一個(gè)函數(shù)引用包含范圍的變量,可能在控制流離開該范圍之后。最后一點(diǎn)非常有用:
>>> def makeConstantAdder(x):... constant = x... def adder(y):... return y + constant... return adder... >>> f = makeConstantAdder(12)>>> f(3)15>>> g = makeConstantAdder(4)>>> g(3)7
請(qǐng)注意,12和4分別在f和g內(nèi)部“消失”,這個(gè)特性使f和g適當(dāng)閉合。

偶然的你
TA貢獻(xiàn)1841條經(jīng)驗(yàn) 獲得超3個(gè)贊
可以引用不再活動(dòng)的環(huán)境的函數(shù)。
我補(bǔ)充一下
閉包允許您將變量綁定到函數(shù)中,而不將它們作為參數(shù)傳遞。
接受參數(shù)的裝飾器是閉包的常用用途。閉包是這種“功能工廠”的常見實(shí)現(xiàn)機(jī)制。在運(yùn)行時(shí)通過數(shù)據(jù)修改策略時(shí),我經(jīng)常選擇在策略模式中使用閉包。
在允許匿名塊定義的語言中 - 例如,Ruby,C# - 閉包可用于實(shí)現(xiàn)(多少)新穎的新控制結(jié)構(gòu)。缺少匿名塊是Python中閉包的限制之一。
添加回答
舉報(bào)
0/150
提交
取消