Python:导入所有变量

Python:导入所有变量,python,Python,所以我有两个python文件。让我们将它们命名为module.py和main.py。 module.py如下所示: name = "bob" age = 20 def changename(): name = "tim" import module print(module.name) module.changename() print(module.name) import module print(module.getname()) module.changename() p

所以我有两个python文件。让我们将它们命名为module.py和main.py。 module.py如下所示:

name = "bob"
age = 20

def changename():
    name = "tim"
import module
print(module.name)
module.changename()
print(module.name)
import module

print(module.getname())
module.changename()
print(module.getname())
main.py如下所示:

name = "bob"
age = 20

def changename():
    name = "tim"
import module
print(module.name)
module.changename()
print(module.name)
import module

print(module.getname())
module.changename()
print(module.getname())
当我运行main.py时,正如预期的那样,我得到了以下输出:

>"bob"
>"tim"
然而,总是要写module.name会非常耗时,所以我可以从module import*开始,它将所有变量和函数导入main.py。但是,将main.py中的代码更改为以下内容后:

from module import *
print(name)
changename()
print(name)
我得到这个输出:

>"bob"
>"bob"
我假设这是因为python在开始时导入变量的值,然后在module.py中的函数更改它们时不更新它们

我的问题是,有没有一种方法可以很好地从模块中导入所有函数和变量,但仍然允许模块更新其变量


提前谢谢

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

我认为最好的方法是在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
from module import changename
from module import getname

print(getname())
changename()
print(getname())
然后,您可以在main.py中使用这些getter,如下所示:

name = "bob"
age = 20

def changename():
    name = "tim"
import module
print(module.name)
module.changename()
print(module.name)
import module

print(module.getname())
module.changename()
print(module.getname())
但我建议逐个导入函数,以防止长名称。像这样:

name = "bob"
age = 20

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

def getname():
    return name
from module import changename
from module import getname

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

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

第一个代码不可能返回该输出。
从模块导入*
通常是不好的做法;如果需要较短的名称,
将模块导入为m