如果我要创建一个名为imp_mod.py
的模块,其中包含我经常使用的所有(主观使用的)相关模块。
将此模块导入我的主程序是否允许我访问imp_mod.py
中包含的导入?
如果是这样,会带来什么缺点?
我认为一个主要的优势是减少导入时间,即使它只节省了几秒钟......
答案 0 :(得分:2)
是的,它允许您访问它们。如果您将这些导入放在imp_mod.py
:
from os import listdir
from collections import defaultdict
from copy import deepcopy
然后,您可以在另一个文件中执行此操作,例如myfile.py
:
import imp_mod
imp_mod.listdir
imp_mod.defaultdict
imp_mod.deepcopy
关于减少进口时间你是错误的,因为恰恰相反。 Python将需要导入imp_mod
,然后导入其他模块,而如果您在myfile.py
本身导入这些模块,则不需要第一次导入。如果您在另一个文件中执行相同的导入,它们将已经在缓存中,因此几乎没有时间用于下一次导入。
这里真正的缺点是可读性较差。例如,无论是谁看imp_mod.listdir
,都会问自己这个方法到底是什么,以及为什么它与os
模块的方法具有相同的名称。当他不得不打开imp_mod.py
只是为了发现它是相同的方法时,他可能不会感到高兴。我不会。
答案 1 :(得分:0)
正如lucasnadalutti所提到的,您可以通过导入模块来访问它们。
就优势而言,如果imp_mod
处理所有导入,它可以使您的主程序更少关注导入的来源,但是,当您的程序变得更复杂并开始包含更多名称空间时,方法可能会变得更加混乱。您可以通过在目录中使用__init__.py
处理导入来执行类似的操作来开始处理这一点,但随着事情变得越来越复杂,就个人而言,我觉得它会增加一点复杂性。我宁愿知道一个模块来自哪里来查找它。