从另一个文件导入和更改变量

问题描述 投票:9回答:2

好吧...

我找了又找,想找一个直接回答我问题的答案,但是没有成功。我的问题是相当直接的,老实说,我以为会有一个更直接的答案。请记住,我对这门语言还比较陌生,还在学习中。

所以我将使用 fileAfileB 作为我的两个文件,和 x 作为我的例子变量。 变量 x 载于 fileB. 如何导入变量 x 变成 fileA, 然后 变化 x 到另一个值,通过 raw_input, 然后 变幻莫测 x 更新 fileB 与新的值?

我不知道这是否可能,但我肯定会这么想。我使用的是python 2.7.11,先谢谢你。

python python-2.7 variables
2个回答
18
投票

如果你所指的 "变量 "是一个可变的值,你所要求的就可以了。

fileB:

my_variable = ["a list with a string in it"]

fileA:

from fileB import my_variable  # import the value
my_variable.append("and another string")

After fileA 已加载 fileB.my_variable 将有两个值。

但是,这只适用于可变的值。如果变量是不可变的,那么在下面的代码就会有两个值。fileA 不能原地改变,所以你会有问题。没有办法直接解决这个问题,但是有很多方法可以解决这个问题,并且还能达到你想要的效果。

最简单的方法就是使用 import fileB 而不是 from fileB import my_variable. 这让你在任何 fileB的命名空间,只需使用类似于 fileB.whatever. 你可以根据自己的意愿重新绑定命名空间中的东西。

fileB:

my_variable = 1    # something immutable this time

fileA:

import fileB
fileB.my_variable = 2   # change the value in fileB's namespace

这可能是最简单的方法。

另一种解决方案是将不可变的变量放在一个可变的容器中,然后修改容器,而不是变量。例如,如果字符串 "a list with a string in it" 的值,我们可以简单地将一个新的值赋给 my_variable[0] 而不是追加)。

一个常见的方法是将值放入一个字典、列表甚至是一个类中(或一个类的可突变实例)。然后你可以导入容器对象,并突变它来改变你关心的值。


1
投票

如果你指的是常量变量,在90%的情况下,这意味着程序的结构不好,因为它可能更容易实现。

一个可能的方法是

在两个文件中创建一些带有输入参数的函数 然后执行它们,并对其值进行处理。

例如

fileA. py

from fileB import testB
TEST_VAL = 5

def testA(val):
    TEST_VAL += 10
    result = testB(TEST_VAL)
    # play with changed TEST_VAL

fileB.py

def testB(val):
    # do something
    return val ** 2
© www.soinside.com 2019 - 2024. All rights reserved.