如何从python中的导入模块更改不可变对象?

问题描述

我发现自己在这种情况下挣扎:如果我有foo.py

# foo.py
test = 0
def changeTest(new):
    test = new
    print(f'New test value: {test}')

我运行以下代码

import foo
print(foo.test)
foo.changeTest(5)
print(foo.test)

输出

0
New test value: 5
0

我无法在main.py中更新foo.test。而如果我使用可变对象,例如test = [0],则可以访问其新值。

# foo.py
test = [0]
def changeTest(new):
    test = [new]

# main.py
import foo.py
print(foo.test)
foo.changeTest(5)
print(foo.test)
## output
[0]
[5]

如果我想让一个模块保留一些环境变量和一些我希望可以从其他地方访问的函数,那么访问该模块数据的最佳实践是什么?正在考虑将所有内容都放在一个类中(因此它是可变的),但是我真的只需要一个实例。

解决方法

函数changeTest()test视为局部变量,函数中的test与模块中的全局test不同,您可以尝试声明test作为全局变量。

这应该有效:

def change_test(new_value):
    global test
    test = new_value