3 回答
TA貢獻(xiàn)1911條經(jīng)驗(yàn) 獲得超7個(gè)贊
名稱的搜索順序?yàn)長(zhǎng)EGB,即本地,封閉,全局,內(nèi)置。因此,全局范圍不是封閉范圍。
編輯
從文檔:
非本地語句使列出的標(biāo)識(shí)符引用最近的封閉范圍中的先前綁定的變量。這很重要,因?yàn)榻壎ǖ哪J(rèn)行為是首先搜索本地名稱空間。該語句允許封裝的代碼在全局(模塊)作用域之外的本地作用域之外重新綁定變量。
TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超5個(gè)贊
答案是全局范圍不包含任何內(nèi)容-它對(duì)所有內(nèi)容都是全局的。global在這種情況下,請(qǐng)使用關(guān)鍵字。
TA貢獻(xiàn)1744條經(jīng)驗(yàn) 獲得超4個(gè)贊
為什么將模塊的作用域視為全局作用域而不是封閉的作用域?它對(duì)于其他模塊仍然不是全局的(嗯,除非您這樣做了
from module import *),對(duì)嗎?
如果您在的名稱module空間中添加了一些名稱;它在使用的任何模塊中都是可見的,module即,它在整個(gè)Python過程中都是全局的。
通常,您的應(yīng)用程序應(yīng)使用盡可能少的可變?nèi)肿兞?。?qǐng)參閱為什么全局變量不好?:
非地區(qū)性
無訪問控制或約束檢查
隱式耦合
并發(fā)問題
命名空間污染
測(cè)試與禁閉
因此,如果nonlocal允許偶然創(chuàng)建全局變量將是不好的。如果要修改全局變量;您可以global直接使用關(guān)鍵字。
global是最具破壞性的:可能會(huì)影響程序中模塊的所有使用nonlocal破壞性較?。菏躤xternal()函數(shù)作用域的限制(在編譯時(shí)檢查綁定)沒有聲明(局部變量)是破壞性最小的選項(xiàng):受inner()函數(shù)作用域的限制
您可以nonlocal在《PEP:3104訪問外部范圍中的名稱》中了解其背后的歷史和動(dòng)機(jī)。
添加回答
舉報(bào)
