还是以案例为开头:
最近做的项目中有这么一个需求:A/B/C三个文件,我把B/C中要用到的全局变量,都放在A文件中,这样后面项目大了,全局变量多了的话不至于出现调用混乱的情况。变量的具体值,可以在程序开始运行的时候从配置文件/Redis中读取,这样不至于写死了以后改起来麻烦。假设A中有变量a,我给初始化为0:
a = 0
然后在B文件中,读取文件中的配置,对变量a赋值:
import A
A.a = 100
按照我之前的理解,A.a应该就是在A所在命名空间进行改动,此时A空间中的变量值应该改了才对。
然后我在同一个进程中(见注1),调用了C文件中的函数func_test()
import A
def func_test():
print A.a
结果我发现a的值竟然还是0。。。
翻阅资料最后得知,我这种跨文件之间的修改,只能通过函数调用这种方式来实现:即在A文件中,添加修改变量的函数,
def change_params(x):
a = x
不能跨文件来进行修改。
注1:python中,不同进程之间不能共享全局变量,在创建进程时,python会把当前存在的全局变量全部copy一份,放进自己的空间中,之后各个进程之间的同名变量不再有任何关系。。各管各的。