请考虑以下代码:
#main.py
From toolsmodule import *
database = "foo"
#toolsmodule
database = "mydatabase"
看起来,这会在每个模块中创建一个具有不同内容的变量。如何从main修改toolsmodule中的变量?以下不起作用:
toolsmodule.database = "foo"
答案 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