理解Python中的全局变量

xia*_*012 6 python global-variables

在使用全局变量时,我在Python中遇到了一个奇怪的问题.

我有两个模块(文件):mod1.pymod2.py

mod1尝试修改中var定义的全局变量mod2.但是varin mod2和varin mod似乎是两个不同的东西.因此,结果表明这种修改不起作用.

这是代码:

#code for mod2.py
global var  
var = 1 
def fun_of_mod2():
    print var

#code for mod1.py
from mod2 import var,fun_of_mod2    
global var #commenting out this line yields the same result
var = 2 #I want to modify the value of var defined in mod2
fun_of_mod2() #but it prints: 1 instead of 2. Modification failed :-(
Run Code Online (Sandbox Code Playgroud)

有关为何会发生这种情况的任何提示 我怎样才能修改valin mod2中定义的值mod1

谢谢

kin*_*all 12

当您导入varmod1:

from mod2 import var,fun_of_mod2
Run Code Online (Sandbox Code Playgroud)

var 在mod1的命名空间中给它起了名字.好像你这样做了:

import mod2
var = mod2.var
fun_of_mod2 = mod2.fun_of_mod2
del mod2
Run Code Online (Sandbox Code Playgroud)

换句话说,现在有两个名称,mod1.varmod2.var.它们起初是相同的,但是当你重新分配时mod1.var,mod2.var仍然指向同一个东西.

你想要做的只是:

import mod2
Run Code Online (Sandbox Code Playgroud)

然后访问并将变量赋值为mod2.var.

值得注意的是,Python中的全局变量并不是真正的全局变量.它们仅对它们声明的模块是全局的.要访问另一个模块中的全局变量,请使用module.variable语法.该global语句可以在函数内部使用,以允许分配模块全局名称(没有它,分配给变量使其成为该函数中的局部变量).它没有其他影响.