结论
- python中的全局变量仅属于当前文件
- 同一个模块import只会import一次
- 若直接导入其他模块的全局变量,仅作为当前文件的全局变量,在当前文件修改并不会影响另外模块中的变量
- 建议被导入模块都写上__main__,调用函数或者修改变量等都放到main函数里
if __name__ == '__main__':
pass
实操一
D:\pythonProject\global_test_variables
a.py
lst = []
name = "name"
def test():
global name, lst
print("a.py:", lst, name)
name = "xixi"
b.py
from a import *
print("b.py: ", lst, name)
lst.append("name")
name = "aha"
def test1():
print("b.py::test1:", lst, name)
example.py
from b import *
from a import *
print("example.py: ", lst, name)
test()
test1()
执行example.py
b.py: [] name
example.py: ['name'] name
a.py: ['name'] name
b.py::test1: ['name'] aha
从执行结果可以看出对于mutable的变量,即lst,因为import到b.py是引用,里面的内容是可以被修改的,而对于name字符串变量,是immutable的,无法被修改。
实操二
a.py
lst = []
name = "name"
def test():
global name, lst
print("a.py:", lst, name)
name = "xixi"
b.py
import a
a.lst.append("name")
a.name = "bbbbbb"
def test1():
print("b.py::test1:", a.lst, a.name)
example.py
import b
import a
a.test()
b.test1()
执行example.py
a.py: ['name'] bbbbbb
b.py::test1: ['name'] xixi