所以我有两个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中的函数更改时不会更新它们。
我的问题是,有没有办法从模块中很好地导入所有函数和变量,但仍允许模块更新它的变量?
提前致谢!
答案 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。