函数中的作用域搜索顺序:L---E---G---B
L-----local,局部名字空间,即局部变量,在函数内部找
E-----enclosing,直接外围空间,
G-----global,全局名字空间,即全局变量
B-----builtin,内建名字空间
1 x = 10 2 def f(): 3 x += 2 4 print(x) #结果报错,由于函数内x被赋值,则认为是局部变量,在函数内寻找, 5 f() #找到结果是x还没被定义,报错
1 x = 10 2 def f(): 3 global x #定义x为全局变量 4 x += 2 #则x会往外部找,找到10,所以执行结果12 5 print(x) 6 f()
1 x = 9 2 def bb(): 3 global x #定义全局变量 4 print(x,1) #执行结果9 5 x = 8 6 def cc(): 7 global x #定义全局变量 8 x += 1 #赋值了认为是内部变量,在内部查找,找到x被定义全局变量,到外面拿到9 9 print(x,2) #执行结果9 10 cc() 11 bb() 12 ########################## 13 x = 9 14 def bb(): 15 global x 16 print(x,3) #执行结果9 17 x = 8 18 def cc(): 19 global x #这个定义可有可无 20 print(x,4) #执行结果8,没赋值则直接向外找 21 cc() 22 bb()