Python全局名称空间和求值顺序

Python全局名称空间和求值顺序,python,namespaces,global,Python,Namespaces,Global,试试这个: A = 1 B = 2 C = A + B def main(): global C print A main的输出为1 为什么会这样?main为什么要了解用于计算C的其他全局变量呢?在Python中,全局变量始终可用于所有局部作用域,包括函数。在这种情况下,主A、B和C都在范围内 global关键字并不像你想象的那样;相反,它允许一个局部作用域操作一个全局函数,也就是说,它使全局变量可写。考虑这些例子: c = 4 print c def foo():

试试这个:

A = 1
B = 2
C = A + B

def main():
    global C
    print A
main的输出为1


为什么会这样?main为什么要了解用于计算C的其他全局变量呢?

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

global关键字并不像你想象的那样;相反,它允许一个局部作用域操作一个全局函数,也就是说,它使全局变量可写。考虑这些例子:

c = 4
print c
def foo():
    c = 3
    print c
foo()
print c
在这里,输出将是

4
3
4
4
3
3

现在,考虑一下:

c = 4
print c
def foo():
    global c
    c = 3
    print c
foo()
print c
在这种情况下,输出将是

4
3
4
4
3
3

在第一种情况下,c=3仅对c进行阴影处理,直到其范围增大,即函数定义结束时。在第二种情况下,我们实际上是在编写全局c之后引用了对全局c的引用,因此更改c的值将导致永久性的更改。

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

global关键字并不像你想象的那样;相反,它允许一个局部作用域操作一个全局函数,也就是说,它使全局变量可写。考虑这些例子:

c = 4
print c
def foo():
    c = 3
    print c
foo()
print c
在这里,输出将是

4
3
4
4
3
3

现在,考虑一下:

c = 4
print c
def foo():
    global c
    c = 3
    print c
foo()
print c
在这种情况下,输出将是

4
3
4
4
3
3

在第一种情况下,c=3仅对c进行阴影处理,直到其范围增大,即函数定义结束时。在第二种情况下,我们实际上是在编写全局c之后引用了对全局c的引用,因此更改c的值将导致永久性的更改。

函数可以读取封闭作用域中的变量。用于写入变量,以指示应将其写入全局字典而不是本地字典。

函数可以读取封闭范围内的变量。用于写入变量,以指示应将其写入全局字典而不是本地字典。

附加文档:此答案没有明确说明全局是关于写入变量的,附加文档:这个答案并没有说明global是关于编写变量的,而不是关于读取变量的。