2016-01-21 68 views
0

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

我搜索并搜索了一个直接回答我的问题,但没有成功的答案。我的问题很简单,我真的认为那里会有更直接的答案。请记住,我对这门语言还比较陌生,并且仍在学习。

所以我将使用fileAfileB作为我的两个文件,并使用x作为我的示例变量。变量x包含在fileB中。我该如何去有关导入变量xfileA然后变化x另一个值通过raw_input然后fileB新值的变量x更新?

我不确定这是否可能,但我一定会这么认为。我正在使用Python 2.7.11,谢谢你的进步。

+0

为什么你需要这个? –

+0

@PeterWood所以基本上...我有一个文件,我正在使用的球员统计(fileB),其中有一个变量,跟踪球员的水平。我想让我使用raw_input来更改该变量来调试程序并在需要时更改级别,以便在编辑它们之后检查各个级别。 – Cether

+0

这听起来像一个配置文件?在FileA中导入FileB,然后创建一个名为modifyParam(fileB.player.level)的函数,FileB player.level = 5 – spicyramen

回答

1

如果 “变量” 你指的是一个可变的值,你在做什么要求将会工作。

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") 

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](而不是附加)指定一个新值。

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

0

如果您指的是常量变量,在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