Python:导入所有变量

时间:2014-10-05 10:34:34

标签: python

所以我有两个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会非常耗时,所以我可以从模块导入*,它将所有变量和函数导入main.py.但是,在将main.py中的代码更改为:

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

我得到了这个输出:

>"bob"
>"bob"

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

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

提前致谢!

2 个答案:

答案 0 :(得分: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以这种方式行事!)。

答案 1 :(得分:0)

经过一些测试后,我意识到最好的方法是使用名为' variables.py'的第三个文件。像@jonrsharpe建议的那样,作为简短的东西进口。这两个文件都可以更改或查看variables.name。