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是关于编写变量的,而不是关于读取变量的。