python 作用域,global與nonlocal的區別


在Python中並不是所有的語句塊中都會產生作用域。只有當變量在Module(模塊)、Class(類)、def(函數)中定義的時候,才會有作用域的概念。

如果在函數中要對全局變量做改變可以使用global關鍵字進行變量聲明。例如下面這個例子:

x = 1
def go():
    x = 2  #只初始化了函數作用域內的x, 不影響全局變量x
go()
print(x)

---------------
1
x = 1
def go():
    global x #聲明x為全局變量x
    x = 2
go()
print(x)

--------------
2

 

global與nonlocal的區別

第一,兩者的功能不同。global關鍵字修飾變量后標識該變量是全局變量,對該變量進行修改就是修改全局變量,而nonlocal關鍵字修飾變量后標識該變量是上一級函數中的局部變量,如果上一級函數中不存在該局部變量,nonlocal位置會發生錯誤(最上層的函數使用nonlocal修飾變量必定會報錯)。

第二,兩者使用的范圍不同。global關鍵字可以用在任何地方,包括最上層函數中和嵌套函數中,即使之前未定義該變量,global修飾后也可以直接使用,而nonlocal關鍵字只能用於嵌套函數中,並且外層函數中定義了相應的局部變量,否則會發生錯誤(見第一)。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM