spe*_*son 1 python namespaces global
试试这个:
A = 1
B = 2
C = A + B
def main():
global C
print A
Run Code Online (Sandbox Code Playgroud)
输出main()是1.
为什么是这样?为什么要main了解用于评估的其他全局变量C?
全局变量始终可用于Python中的所有本地作用域,包括函数.在这种情况下,内main() A,B和C都在范围之内.
该global关键字没有做什么,似乎你认为它; 相反,它允许局部范围操纵全局函数(它使全局变量"可写",可以这么说).考虑这些例子:
c = 4
print c
def foo():
c = 3
print c
foo()
print c
Run Code Online (Sandbox Code Playgroud)
在这里,输出将是
4
3
4
Run Code Online (Sandbox Code Playgroud)
现在,考虑一下:
c = 4
print c
def foo():
global c
c = 3
print c
foo()
print c
Run Code Online (Sandbox Code Playgroud)
在这种情况下,输出将是
4
3
3
Run Code Online (Sandbox Code Playgroud)
在第一种情况下,c = 3只有阴影c直到其范围为止(即函数定义结束时).在第二种情况下,我们实际上是指c在写完之后对全局的引用global c,因此更改值c将导致永久性更改.