python學(xué)習(xí)-閉包問(wèn)題

如果試圖在一個(gè)內(nèi)部函數(shù)里對(duì)外部作用域(不包括外部函數(shù)的外部作用域)的變量進(jìn)行引用,內(nèi)部函數(shù)就會(huì)被認(rèn)為是閉包。

閉包實(shí)例

對(duì)于func2函數(shù)來(lái)說(shuō),對(duì)在func1函數(shù)的整個(gè)作用域(func2函數(shù)的非全局作用域的外部作用)的變量x進(jìn)行引用,自此就可以說(shuō)func2函數(shù)就是所謂的閉包。由于閉包本身是基于內(nèi)部函數(shù)的概念,所以不能在外部函數(shù)的外部作用域?qū)Ρ徊缓M(jìn)行調(diào)用。

既然是基于內(nèi)部函數(shù)這一概念而來(lái),自然對(duì)于內(nèi)部函數(shù)來(lái)說(shuō)對(duì)引用外部函數(shù)作用域內(nèi)的變量進(jìn)行修改,將會(huì)啟動(dòng)解釋器的屏蔽機(jī)制。x*=x的左值此時(shí)是內(nèi)部函數(shù)作用域里的變量,此時(shí)試圖將沒(méi)有定義的數(shù)據(jù)進(jìn)行平方操作,因此報(bào)錯(cuò)。

解決方法1:

應(yīng)用容器類(lèi)型(list,tuple之類(lèi)的)存放外部函數(shù)作用域的變量從而不會(huì)被屏蔽機(jī)制屏蔽掉,因?yàn)槿萜黝?lèi)型不是存放在棧里面。

解決方法2(python3之后的解決辦法):

nonlocal關(guān)鍵字

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、引言 最近在刷leetcode題的時(shí)候,遇到一個(gè)求最長(zhǎng)回文子串的題目,于是,我寫(xiě)了如下的代碼: 哎呀,寫(xiě)了兩個(gè)...
    文哥的學(xué)習(xí)日記閱讀 14,513評(píng)論 6 32
  • 官方中文版原文鏈接 感謝社區(qū)中各位的大力支持,譯者再次奉上一點(diǎn)點(diǎn)福利:阿里云產(chǎn)品券,享受所有官網(wǎng)優(yōu)惠,并抽取幸運(yùn)大...
    HetfieldJoe閱讀 5,716評(píng)論 16 88
  • 閉包: 官方”的解釋是:閉包是一個(gè)擁有許多變量和綁定了這些變量的環(huán)境的表達(dá)式(通常是一個(gè)函數(shù)),因而這些變量也是該...
    小裁縫sun閱讀 711評(píng)論 0 5
  • 原文鏈接:Understanding Scope in JavaScript原文作者:Hammad Ahmed (...
    MollyFool閱讀 1,166評(píng)論 0 4
  • 高考完的暑假去看了《后會(huì)無(wú)期》,那是我第一次意識(shí)到我內(nèi)心大概也許有可能是個(gè)文青。在周?chē)说拿鏌o(wú)表情中淚流滿(mǎn)面...
    七一驁閱讀 158評(píng)論 0 1

友情鏈接更多精彩內(nèi)容