修改使用from ... import *导入的模块中的变量

时间:2011-01-21 12:02:58

标签: python python-3.x python-import

请考虑以下代码:

#main.py
From toolsmodule import *
database = "foo"

#toolsmodule
database = "mydatabase"

看起来,这会在每个模块中创建一个具有不同内容的变量。如何从main修改toolsmodule中的变量?以下不起作用:

toolsmodule.database = "foo"

3 个答案:

答案 0 :(得分:16)

听起来不是使用from toolsmodule import *的众多理由中的另一个。

如果你只是做import toolsmodule,那么你可以做toolsmodule.database = 'foo',一切都很棒。

答案 1 :(得分:6)

Pythons变量名只是变量上的标签。当import *所有这些标签都是本地标签时,然后设置数据库时,只需替换局部变量,而不是工具模块中的变量。因此,这样做:

toolsmodule.py:

database = "original"

def printdatabase():
   print "Database is", database

然后运行:

import toolsmodule
toolsmodule.database = "newdatabase"
toolsmodule.printdatabase()

输出

Database is newdatabase

请注意,如果您从另一个模块ALSO执行了import *,则不会反映此更改。

简而言之:永远不要使用from x import *。我不知道为什么所有新手都坚持这样做,尽管我所知道的所有文件都说这是个坏主意。

答案 2 :(得分:2)

你为什么不这样做:

import toolsmodule
toolsmodule.database = "foo"
from toolsmodule import *  #bad idea, but let's say you have to..
print database #outputs foo