多个循环导入会降低性能吗?

时间:2013-03-29 22:25:18

标签: python performance python-2.7

我有K python文件需要存在于任何地方,以前我试图分离他们的逻辑并在每个python代码中逐个导入它们,现在我只想循环导入彼此内部的每个K文件。 / p>

这似乎会导致K ^ 2负载,但是我无法释放足够的脑空间来实际考虑它。

假设K = 4并且有a.py,b.py,c.py,d.py:我正在考虑从b.py,c.py,d.py导入所有内容。 a.py -and- b.py c.py和d.py只会在顶部导入a.py.并且一个any.py只是导入a.py,因为其中已经包含了所有内容。

替代方案是any.py导入a.py b.py c.py d.py,但很难将这4个单独分开。

2 个答案:

答案 0 :(得分:3)

正如所有评论所指出的那样,这是一个可疑的设计,可能会误导你和你的合作者/读者,使维护更加困难等等。

但这不是性能问题。

当您多次对同一个东西调用import时,每次在第一个之后需要持续(几乎没有)时间。 (默认)导入机制在sys.modules中查找它,看到它已经存在,并返回它。所以,这里没有O(K ^ 2);没关系)。

您可以非常轻松地自行测试。创建这些文件:

# a.py
print('a')
import b
import c

# b.py
import a
print('b')

# c.py
import a
print('c')

现在,启动Python解释器并执行此操作:

>>> import a
a
b
c
>>> import b
>>> import a

每个项目只出现一次,因为导入器在第一次之后永远不会进入print语句。

答案 1 :(得分:2)

这基本上是包的用途。将所有Python文件放在一个目录中,添加一个导入它们的__init__.py,然后只需将该目录导入为Python模块。