gpt4 book ai didi

python - 在 Python 中访问全局变量时的导入行为

转载 作者:行者123 更新时间:2023-11-28 17:43:12 25 4
gpt4 key购买 nike

bar.py 中:

var = 1
def set_var():
global var
var = 2

foo.py中:

from bar import *

print(var)
set_var()
print(var)

foo2.py中:

import bar

print(bar.var)
bar.set_var()
print(bar.var)

如果我运行 foo.py,输出是:

1
1

但是如果我运行 foo2.py,输出是:

1
2

这是我所期望的。

我只想了解这种行为,因为我是 Python 的新手,还没有找到这样做的充分理由。

PD:附加信息。我想开发一个使用单例对象的模块,并且我有一些使用该对象的遗留代码。我不希望在遗留代码中为每个对该对象的引用添加前缀,所以这就是为什么我认为使用 from library import object 语法导入模块会有所帮助。

所以在库中,我有一些函数可以访问全局对象来配置它,就像在示例 (bar.py) 中一样。在遗留代码中,我希望它只需要像在 foo.py 中那样进行某种导入。

感谢指导。

编辑:第二个例子

在 bar.py 中

var_list = list(range(0, 2))
var_list2 = list(range(0, 2))

def set_var():
global var_list
var_list = list(range(0, 3))
var_list2.append(2)

在 foo.py 中

from bar import *

print(var_list)
print(var_list2)
set_var()
print(var_list)
print(var_list2)

输出是:

[0, 1]
[0, 1]
[0, 1]
[0, 1, 2]

我知道在 set_var 中,我们正在使用 list() 创建一个新对象,但我希望在 foo.py 中访问这个新对象,当我引用它与 var_list (就像使用语法 bar.var_list 一样)。我需要更多背景知识。

谢谢

最佳答案

bar.py 中的“var”是bar.var。始终(除非它是 __main__.var,但这是一个不同的问题)。对该名称的任何操作仅发生在该模块中/发生在该模块中,而不会发生在其他任何地方制作的副本,例如通过 from bar import ... 完成的副本。

关于python - 在 Python 中访问全局变量时的导入行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21814950/

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