【问题标题】:Importing and changing variables from another file从另一个文件导入和更改变量
【发布时间】:2016-01-21 00:07:21
【问题描述】:

好的...

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

所以我将使用fileAfileB 作为我的两个文件,并使用x 作为我的示例变量。 变量x 包含在fileB 中。如何将变量x 导入fileA然后通过raw_inputx 更改为另一个值,然后拥有变量x用新值更新fileB

我不确定这是否可能,但我肯定会这么想。我正在使用 python 2.7.11,谢谢。

【问题讨论】:

  • 你为什么需要这个?
  • @PeterWood 所以基本上......我有一个用于播放器统计数据的文件(fileB),它有一个跟踪玩家级别的变量。我想为我提供一种方法来使用 raw_input 更改该变量以调试程序并在需要时更改级别,以便我可以在编辑它们后检查各个级别。
  • 这听起来像一个配置文件?在 FileA 中导入 FileB 然后创建一个名为 modifyParam(fileB.player.level), FileB player.level = 5 的函数

标签: python python-2.7 variables


【解决方案1】:

如果您所指的“变量”是一个可变值,那么您所要求的就会起作用。

文件B:

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

文件A:

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 这样的名称。您可以将命名空间中的内容重新绑定到您心中的内容:

文件B:

my_variable = 1    # something immutable this time

文件A:

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

这可能是最简单的方法。

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

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

【讨论】:

  • 非常简洁准确的答案。谢谢!
【解决方案2】:

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

一种可能的方法是:

使用输入参数在两个文件中创建一些函数并执行它们并使用值。

例如:

文件A.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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-19
    • 2021-04-17
    • 1970-01-01
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多