在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關鍵字只能用於嵌套函數中,並且外層函數中定義了相應的局部變量,否則會發生錯誤(見第一)。