参考tutorial.pdf 9.2 Python 作用域和命名空间
总结:
只有在def一开始就声明的一个变量,他与上次的同名变量没有任何关系,可以随意使用
如果在def中未声明而直接使用一个变量,他会向上寻找,使用第一次遇到的同名变量的数值,不能赋值。只能只读,如果该变量是list,可以执行一些方法的操作。
global和nonlocal,是一种特殊的同步变量名的方式,同样使用前,这层def中不能用过该变量名
nonlocal的上层不能是主体,nonlocal向上追溯直至第一层def,需要有一个独立的变量名,如总结1,如果期间先遇到global 变量,报错
global,可以理解为在主体中声明该变量,如果主题中有了,就同时使用其空间和数值,如果没有,就在主题中没有,就算是在主体中新建了一个未赋值变量,而这层函数和主体同名或新建函数一心同体。只是下层不能用nonlocal调用这个变量
因为过程太长,所以转开一小篇文章存放总结:python - 官方简易文档篇(1)
def a0():
print(a)
def a1():
a=1
print(a,"a11")
def a2():
a=2
print(a,"a21")
def a3():
def a4():
nonlocal a
a=3
a4()
a3()
print(a,"a22")
a2()
print(a,"a12")
a1()
print(a)