gpt4 book ai didi

python - 理解 Python 中的全局变量

转载 作者:太空狗 更新时间:2023-10-29 22:13:53 26 4
gpt4 key购买 nike

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

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

mod1 尝试修改 mod2 中定义的全局变量 var。但是mod2中的varmod中的var好像是两个不同的东西。因此,结果表明这样的修改是无效的。

代码如下:

#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 :-(

关于为什么会发生这种情况的任何提示?以及如何在 mod1 中修改 mod2 中定义的 val 的值?

谢谢

最佳答案

当您将 var 导入 mod1 时:

from mod2 import var,fun_of_mod2

您在 mod1 的命名空间中将其命名为 var 就像您这样做一样:

import mod2
var = mod2.var
fun_of_mod2 = mod2.fun_of_mod2
del mod2

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

你要做的只是:

import mod2

然后访问变量并将其分配为 mod2.var

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

关于python - 理解 Python 中的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10868530/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com