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

Dav*_*vid 10 python python-import python-3.x

请考虑以下代码:

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

#toolsmodule
database = "mydatabase"
Run Code Online (Sandbox Code Playgroud)

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

toolsmodule.database = "foo"
Run Code Online (Sandbox Code Playgroud)

Dan*_*man 17

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

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

  • 所以让模块名称简短:`import longmodulename as sname`.现在`sname`将引用`longmodulename`. (13认同)
  • 如果你真的想用toolsmodule.*将你的主命名空间垃圾邮件,请同时使用这两种技术:`import toolsmodule; 来自toolsmodule import*`. (5认同)
  • 如果你不想每次都输入`toolsmodule`,你可以执行以下操作:`import toolsmodule as tm`.这样可以保持名称空间的合理性并节省输入. (4认同)
  • 我知道这一点,但我使用这些变量很多,我有很长的模块名称,我想避免额外的输入. (2认同)

Len*_*bro 6

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

toolsmodule.py:

database = "original"

def printdatabase():
   print "Database is", database
Run Code Online (Sandbox Code Playgroud)

然后运行:

import toolsmodule
toolsmodule.database = "newdatabase"
toolsmodule.printdatabase()
Run Code Online (Sandbox Code Playgroud)

输出是

Database is newdatabase
Run Code Online (Sandbox Code Playgroud)

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

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