1. global #消除python對global variable的屏蔽(shadowing)作用
1.1 如果只是 Access 變量,不必加global
1.2如果在 函數中需要修改global變量,則需加global
>>> t = 5
>>> hex(id(t))
'0x64320250'
>>> def withoutGlobal():
t = 10
print("without global id of t is:",hex(id(t)))
>>> withoutGlobal()
without global id of t is: 0x643202f0
>>> def withGlobal():
global t
t = 10
print("with global id of t is:",hex(id(t)))
>>> hex(id(t))
'0x64320250'
>>> withGlobal()
with global id of t is: 0x643202f0
>>> # after call withGlobal()
>>> hex(id(t))
'0x643202f0'
>>> t
10
2.nonlocal 用在內部函數中
2.1 錯誤例子
>>> def fun1():
x = 5 #相當於fun2()的全局變量
def fun2():
x *= x
return fun2()
>>> fun1()
UnboundLocalError: local variable 'x' referenced before assignment
2.2 正確例子
>>> def fun1():
x = 5
def fun2():
nonlocal x
x *= x
return x
return fun2()
>>> fun1()
25