提问人:Victor Modamio 提问时间:9/12/2020 更新时间:9/12/2020 访问量:283
如何从python中导入的模块中更改不可变对象?
How to change immutable objects from an imported module in 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]
如果我想要一个模块,其中保留了一些环境变量和一些我希望从其他人访问的函数,那么访问模块数据的最佳实践是什么?正在考虑将所有内容都放在一个类中(所以它是可变的),但我真的只需要一个实例。
答:
0赞
Waad
9/12/2020
#1
该函数被视为局部变量,函数中的函数与模块中的全局变量不同,您可以尝试将 test 声明为全局变量。changeTest()
test
test
test
这应该有效:
def change_test(new_value):
global test
test = new_value
评论
0赞
Victor Modamio
9/12/2020
那么,为什么我在 foo.test 的情况下获得更新值是一个列表,例如。那么它是否被视为全局的,因为它是可变的?
上一个:Python 可变和可哈希类型
评论