g = 'global'
def change():
global g
g = g + "change"
print(g)
change()
print(g)
''' 结果: global globalchange '''
def function():
g = 'function'
def localvar():
g = 'local'
def globalvar():
global g
g = 'global'
def closingvar():
nonlocal g
g = 'nonlocal'
localvar()
print(g)
globalvar()
print(g)
closingvar()
print(g)
function()
print(g)
''' 结果: function function nonlocal global '''
总结:
第一种
g = 10
def printg():
print(g) #在内部没有赋值,则此g就是外层的g
def localvar():
g = 'local' #如果内部有赋值,则此g就是这个函数的局部变量
第二种
def globalvar():
global g #使用global描述的变量是全局的g
g = 'global'
第三种
def closingvar():
nonlocal g #使用nonlocal描述的变量是函数外层最近的g,不包含全局的g
g = 'nonlocal'
在举个例子
def function():
g = 'function'
def closingvar():
nonlocal g #这个g就是外层离他最近的g,也就是闭包中的g
g = 'nonlocal'