[Python] Python 變數範圍
變數範圍總是在指定值時建立。例如:
x = 10
y = 10
def b():
x = 100
print x
print y
b() # 100 10
print x # 10
以這個例子來說就建立了2個不同的 x
。
取用變數時,也是從當時的範圍開始尋找,若沒有,才找尋外部範圍。所以 y
就會向外尋找。
Global
如果希望指定值的變數是全域範圍的話,則要使用 global
x = 10
def some():
global x
x = 20
print x # 10
some()
print x # 20
但下面這樣會出錯,因為 print(x)
是使用區域變數:
x = 10
def some():
print(x)
x = 20
some()
UnboundLocalError: local variable 'x' referenced before assignment
Nonlocal
那如果要使用上一層的變數的話,在Python 3中新增了nonlocal
,可以指明變數並非區域變數,請依照函式(Local functon)、外包函式(Endosing function)、全域(Global)、內建(Builtin)的順序來尋找,即使是指定運算。例如:
x = 10
def outer():
x = 100 # 這是在 outer() 函式範圍的 x
def inner():
nonlocal x
x = 1000 # 改變的是 outer() 函式的 x
inner()
print(x) # 1000
outer()
print(x) # 10