【问题标题】:Python: Import all variablesPython:导入所有变量
【发布时间】:2014-10-05 10:34:34
【问题描述】:

所以我有两个 python 文件。我们称它们为 module.py 和 main.py。 module.py 看起来像这样:

name = "bob"
age = 20

def changename():
    name = "tim"

main.py 看起来像这样:

import module
print(module.name)
module.changename()
print(module.name)

当我运行 main.py 时,我得到了这个输出,正如预期的那样:

>"bob"
>"tim"

但是,总是必须编写 module.name 会非常耗时,所以我可以使用 from module import *,它将所有变量和函数导入 main.py。但是,将 main.py 中的代码更改为以下代码后:

from module import *
print(name)
changename()
print(name)

我得到这个输出:

>"bob"
>"bob"

我认为这是因为 python 在开始时导入变量的值,然后当它们被 module.py 中的函数更改时不会更新它们。

我的问题是,有没有办法很好地从模块中导入所有函数和变量,但仍然允许模块更新它的变量?

提前致谢!

【问题讨论】:

  • 你的第一个代码不可能返回那个输出。
  • from module import * 通常是不好的做法;如果您需要更短的名称,import module as m

标签: python


【解决方案1】:

我认为最好的方法是在 module.py 中为要共享的每个全局变量编写 getter 和 setter 函数。像这样:

name = "bob"
age = 20

def changename():
    global name  # This tells that name is not local variable.
    name = "tim"

def getname():
    return name

然后,您可以像这样在 main.py 中使用这些 getter:

import module

print(module.getname())
module.changename()
print(module.getname())

但我建议一一导入函数以防止长名称。像这样:

from module import changename
from module import getname

print(getname())
changename()
print(getname())

我用 Python2.7 测试了这些代码。在为其设置值之前,将变量定义为全局变量;因为在函数中为变量设置值会使其成为局部变量(我的 Python 就是这样做的!)。

【讨论】:

    【解决方案2】:

    经过一些测试,我意识到最好的方法是将第三个名为“variables.py”的文件导入为简短的文件,正如@jonrsharpe 所建议的那样。这两个文件都可以更改或查看 variables.name。

    【讨论】:

      猜你喜欢
      • 2010-11-08
      • 2010-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多