如果这个问题似乎有所补救,我会事先道歉。
在Python中被认为更有效:
标准导入
import logging
try:
...some code...
exception Exception, e:
logging.error(e)
...或...
内容相关导入
try:
...some code...
exception Exception, e:
import logging
logging.error(e)
答案 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解释器在第一次导入时只会执行一次解析模块的工作。
一般情况下,您最终会得到更易于维护的代码,只需在文件顶部导入所需的所有模块即可。