在函数中导入扭曲模块而不是在开头

时间:2012-12-07 16:00:34

标签: python twisted

我正在阅读伟大的python扭曲教程http://krondo.com/?page_id=1327有点混乱,在许多例子中,在python文件中而不是在开始时多次导入扭曲的反应器或其他模块。因为在python方式我们在文件开头使用导入模块。任何人都可以详细说明。

1 个答案:

答案 0 :(得分:1)

一般来说,你是正确的 - 在Python中,就像在大多数语言中一样,模块中的相关import语句应该位于模块的开头,它们很容易找到。在大多数情况下,这是可取的,这就是它的教学方式。

但与大多数规则一样,也有例外。 Python允许在函数和类定义以及模块级别中导入语句。将导入放入函数中的一个很好的理由是,某些导入实际上可能是相当昂贵且耗时的操作。

在Twisted的from twisted.internet import reactor的情况下,在幕后会有很多额外的工作和魔法。因此,在实际需要之前推迟导入更有意义 - 最好是在只调用一次的函数中(或在极少数情况下)。特定于Twisted的另一个原因(前面提到的“魔术”)是导入reactor的行为创建了该对象的单例实例,而其他代码可以影响反应器实例的创建方式。所以我们推迟导入反应堆,直到任何其他设置代码都有机会执行。

有时需要使用这种类型的在线进口的最后一个原因是循环进口问题。除非你提出要求,否则我不会详细介绍这个问题,但我认为你可以在这个网站上找到关于这个问题的其他讨论。