python3中增加了nonlocal关键字,在用全局变量时一定要注意作用域的范围。
以下示例演示了如何引用不同的作用域和命名空间,以及如何使用 global和 nonlocal 影响变量绑定:
#-*-coding:utf-8-*-
spam = None
def scope_test():
def do_local():
spam = 'local spam'
def do_nonlocal():
nonlocal spam
spam = 'nonlocal spam'
def do_global():
global spam
spam = 'global spam'
print (spam) #此处输出的是全局变量spam的值
spam = 'test spam'
do_local()
print('after local assignment:',spam)
do_nonlocal()
print('after nonlocal assignment:',spam)
do_global()
#这里的作用域是scope_test函数,即spam是局部的
#和do_global函数中的spam不同
print('after global assignment:',spam)
if '__main__' == __name__:
scope_test()
print (spam)