Python全局范围问题

时间:2014-05-29 20:43:22

标签: python variables methods module global

我在修改Python中不同文件之间的全局变量时遇到了问题。例如:

File1.py:

x = 5

File2.py:

from File1 import *

def updateX():
    global x
    x += 1

main.py:

from File2 import * 

updateX()
print x #prints 5

1 个答案:

答案 0 :(得分:2)

这里有几点需要注意。

首先,global不是全球性的。真正全局的东西,比如内置函数,存储在{3}模块中,或{3}}存储在Python 3中。__builtin__表示模块级。

其次,当你builtins时,你得到的新变量与你global'模块中的变量名称相同,引用相同的对象。这意味着如果您随后在一个模块中重新分配变量,则另一个模块不会看到更改。另一方面,改变一个可变对象是两个模块都看到的变化。

这意味着在import *的第一行之后:

import *

main.pyfrom File2 import * File1(主脚本运行的模块)都有单独的File2个变量引用相同的__main__对象。 x5也有File2个变量引用__main__函数。

第二行之后:

updateX

只有updateX的{​​{1}}变量会重新分配给updateX() 。 (该函数记录了它的定义位置,因此它会更新File2的{​​{1}}而不是x。)

第三行:

6

打印File2的{​​{1}},仍为5。