假设我有两个Python模块:module1.py
:
import module2
def myFunct(): print "called from module1"
module2.py
:def myFunct(): print "called from module2"
def someFunct(): print "also called from module2"
如果我导入
module1
,重新导入module2
是更好的礼节,还是仅将其称为module1.module2
?例如(
someotherfile.py
):import module1
module1.myFunct() # prints "called from module1"
module1.module2.myFunct() # prints "called from module2"
我也可以这样做:
module2 = module1.module2
。现在,我可以直接调用module2.myFunct()
。但是,我可以将
module1.py
更改为:from module2 import *
def myFunct(): print "called from module1"
现在,在
someotherfile.py
中,我可以执行以下操作:import module1
module1.myFunct() # prints "called from module1"; overrides module2
module1.someFunct() # prints "also called from module2"
另外,通过导入
*
,help('module1')可以显示module2
的所有功能。另一方面,(假设
module1.py
使用import module2
),我可以这样做:someotherfile.py
: import module1, module2
module1.myFunct() # prints "called from module1"
module2.myFunct() # prints "called from module2"
再次,哪个是更好的礼节和做法?要再次导入
module2
,还是只引用module1
的导入? 最佳答案
只是import module2
。由于Python将模块对象缓存在sys.modules中,因此重新导入相对没有成本。
此外,像module1.module2.myFunct
中那样链接点是对Law of Demeter的违反。也许有一天您会想要用其他不导入module1
的模块module1a
替换module2
。通过使用import module2
,您将不必重写所有出现的module1.module2.myFunct
。from module2 import *
通常是一个不好的做法,因为它使跟踪变量的来源变得困难。混合模块 namespace 会造成变量名冲突。例如,from numpy import *
是绝对禁止的,因为这样做会覆盖Python的内置sum
,min
,max
,any
,all
,abs
和round
。
关于Python礼节: Importing Modules,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17385156/