Python 导入包含';导入&x27;命令?

Python 导入包含';导入&x27;命令?,python,Python,如果我要创建一个被调用的模块,例如imp_mod.py,其中包含我经常使用的所有(主观使用的)相关模块 将此模块导入我的主程序是否允许我访问包含在imp_mod.py中的导入 如果是的话,这会带来什么不利因素 我想一个主要的优势是减少了导入所花费的时间,即使只节省了几秒钟…是的,它允许您访问它们。如果将这些导入放置在imp_mod.py中: from os import listdir from collections import defaultdict from copy import de

如果我要创建一个被调用的模块,例如
imp_mod.py
,其中包含我经常使用的所有(主观使用的)相关模块

将此模块导入我的主程序是否允许我访问包含在
imp_mod.py
中的导入

如果是的话,这会带来什么不利因素


我想一个主要的优势是减少了导入所花费的时间,即使只节省了几秒钟…

是的,它允许您访问它们。如果将这些导入放置在
imp_mod.py
中:

from os import listdir
from collections import defaultdict
from copy import deepcopy
import imp_mod
imp_mod.listdir
imp_mod.defaultdict
imp_mod.deepcopy
然后,您可以在另一个文件中执行此操作,例如,
myfile.py

from os import listdir
from collections import defaultdict
from copy import deepcopy
import imp_mod
imp_mod.listdir
imp_mod.defaultdict
imp_mod.deepcopy
减少导入时间是错误的,因为实际情况正好相反。Python需要导入
imp_mod
,然后再导入其他模块,而如果在
myfile.py
本身中导入这些模块,则不需要第一次导入。如果在另一个文件中执行相同的导入,则它们将已在缓存中,因此在下一次导入中几乎不会花费时间


这里真正的缺点是可读性差。例如,任何查看
imp_mod.listdir
的人都会问自己这个方法到底是什么,为什么它与
os
模块的方法同名。当他不得不打开imp_mod.py来发现这是同样的方法时,他可能不会高兴。我不会。正如lucasnadalutti提到的,您可以通过导入模块来访问它们


就优势而言,如果
imp_mod
处理所有导入,它可以使主程序不太关心导入来自何处,但是,随着程序变得更复杂,并开始包含更多的名称空间,这种方法可能会变得更混乱。您可以通过在目录中使用
\uuuu init\uuuu.py
来处理一些类似的导入操作,但是随着事情变得越来越复杂,我个人觉得这会增加一点复杂性。我只想知道模块是从哪里来的,然后进行查找。

不,这不会节省时间:所有导入的模块都会缓存。导入其他模块已经导入的内容将重用缓存中的副本,因此实际上根本不需要花费时间。@CharlesDuffy:如果您有几十个或数百个地方需要导入
imp_mod
,则可以节省一些时间;处理导入的代码确实会缓存,但在检查缓存之前它会做大量的工作,因此将10*模块-1缓存导入减少到模块-1缓存导入可能会节省一点启动时间。对运行时没有影响,除非您有内部导入的函数,以减少启动时间来交换缓存的模块查找开销;直接查找缓存中已知的模块,例如,
sys.modules['collections]
每次使用大约需要60纳秒,而
import collections
重复执行每次使用大约需要350纳秒。每次导入可以节省三千分之一秒的时间,这并不令人印象深刻。:-)