说明:i 和foo()都为全局变量,i 是在模块文件顶层注册的,所以为全局变量,他能够在函数内部进行引用而不需要再特意声明是全局变量,且foo()函数也是全局变量
1.当没有局部变量时,print(i,'in foo()'),根据LEGB规则,打印的是全局变量;print(i,'global')也是全局变量
如下
i = 1 def foo(): print(i,'in foo()') #局部变量 print(i,'global') #全局变量 foo() print(i,'未定义') #输出 1 global 1 in foo() 1
2.当设置局部变量时,print(i,'in foo()') 打印局部变量,print(i,'global'),打印全局变量,print(i,'未定义'),打印全局变量 1
i = 1 def foo(): i=5 print(i,'in foo()') #局部变量 print(i,'global') #全局变量 foo() print(i,'未定义') #输出 1 global 5 in foo() 1 未定义
3.当把局部变量设置成global 全局变量时,print(i,'in foo()'),打印的还是局部变量,print(i,'global'),没有变量,始终是def 之前定义的变量i=1;
print(i,'未定义'),根据LEGB 规则,寻找全局变量,因全局变量设置为i =5,打印出来也是5
i = 1 def foo(): global i i=5 print(i,'in foo()') #局部变量 print(i,'global') #全局变量 foo() print(i,'未定义') #输出 1 global 5 in foo() 5 未定义