哪个在Python中更有效:标准导入还是上下文导入?

时间:2008-11-17 17:37:45

标签: python

如果这个问题似乎有所补救,我会事先道歉。

在Python中被认为更有效:

标准导入

import logging

try:
  ...some code...
exception Exception, e:
  logging.error(e)

...或...

内容相关导入

try:
  ...some code...
exception Exception, e:
  import logging
  logging.error(e)

5 个答案:

答案 0 :(得分:6)

上下文导入在技术上更有效率,但我认为它们可能会产生其他问题。

稍后,如果要添加类似的except子句,现在有两个位置来维护相同的代码块。您现在也遇到了测试异常的问题,以确保第一次导入不会导致代码中出现任何无法预料的问题。

答案 1 :(得分:3)

这取决于您执行上下文导入的频率。

import语句需要检查模块是否存在,其成本非零。

许多上下文导入将是一种性能损失,因为简单性没有真正的好处。除非您确实很少或永远不会使用导入,否则几乎没有什么好处。

if语句中的上下文导入是有意义的,特别是当它在顶层完成时,这意味着恰好一次。

if someConfig:
    import this as bigDeal
else:
    import that as bigDeal

答案 2 :(得分:3)

这是一种微观优化。别担心。

答案 3 :(得分:2)

他们基本上是一样的。无论您导入多少次,Python解释器只会加载一次使用过的模块一次。更改import语句的位置只会影响名称的绑定位置 - 例如,如果您的import语句位于函数内部,则该名称只能在该函数中使用。

但一般来说,导入通常尽可能接近文件的“顶部”。

答案 4 :(得分:1)

这两种方法之间的性能差异在实践中将非常小。我从来没有见过这样的情况,这会产生明显的差异。

值得记住的是,python解释器在第一次导入时只会执行一次解析模块的工作。

一般情况下,您最终会得到更易于维护的代码,只需在文件顶部导入所需的所有模块即可。