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

How to change immutable objects from an imported module in python?

提问人:Victor Modamio 提问时间:9/12/2020 更新时间:9/12/2020 访问量:283

问:

我发现自己在这种情况中挣扎:如果我有 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]

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

python-3.x 不变性 python模块 可变

评论


答:

0赞 Waad 9/12/2020 #1

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

这应该有效:

def change_test(new_value):
    global test
    test = new_value

评论

0赞 Victor Modamio 9/12/2020
那么,为什么我在 foo.test 的情况下获得更新值是一个列表,例如。那么它是否被视为全局的,因为它是可变的?