Skip to main content
 首页 » 编程设计

Python 全局命名空间和评估顺序

2025年05月04日11jillzhang

试试这个:

A = 1 
B = 2 
C = A + B 
 
def main(): 
    global C 
    print A 

main() 的输出是1。

这是为什么?为什么 main 应该了解用于计算 C 的其他全局变量?

请您参考如下方法:

全局变量始终可用于 Python 中的所有局部作用域,包括函数。在这种情况下,在 main() 中,A、B 和 C 都在范围内。

global 关键字并没有像您认为的那样做;相反,它允许局部作用域操纵全局函数(可以说,它使全局变量“可写”)。考虑这些例子:

c = 4 
print c 
def foo(): 
    c = 3 
    print c 
foo() 
print c 

在这里,输出将是

4 
3 
4 

现在,考虑一下:

c = 4 
print c 
def foo(): 
    global c 
    c = 3 
    print c 
foo() 
print c 

在这种情况下,输出将是

4 
3 
3 

在第一种情况下,c = 3 只是隐藏 c 直到它的作用域结束(即当函数定义结束时)。在第二种情况下,我们实际上是在编写 global c 之后引用对全局 c 的引用,因此更改 c 的值将导致永久性的改变。