是否保证python导入按顺序排列?依靠这个好主意?

时间:2014-08-01 20:32:47

标签: python import

如果我有以下Python代码:

import module1
import module2
  • Python是否保证在module1之前加载module2,并且它们不是,例如,并行加载?这适用于CPython,但我希望代码也可以移植到其他版本,包括允许多线程的代码。搜索Python规范并没有发现任何事情。
  • 依赖进口订单是个好主意,即使有保证吗? module1中的初始化代码必须在module2之前运行。我不认为替代方案,module1.init()然后module2.init()非常pythonic。

2 个答案:

答案 0 :(得分:10)

  1. 是的,保证进口订单。
  2. 不,这不是个好主意。在导入导入module1的{​​{1}}之前导入另一个文件非常容易打破此问题。如果您希望module2module1之前运行,那么在module2顶部显式导入module1要好得多。

答案 1 :(得分:2)

导入将按照他们在代码执行中遇到的顺序进行。但是,这可能与它们在任何特定文件中列出的顺序不同,因为其他模块也可能导入模块。例如,如果你有:

import foo
import bar
import baz

foo.py顶部有import bazbaz将在bar之前导入(假设这些模块都没有导入)。

如果module2需要加载module1,最简单的方法是让module2导入module1。这不会重做"如果已导入module1导入(它将仅使用已导入的模块),因此它对性能的影响可以忽略不计。