什么时候Python导入?

时间:2017-07-07 15:35:45

标签: python python-3.x python-import

问题

如果我在import块中嵌套了if/else个语句,我是否会提高效率?我知道有些语言会对import的代码和语法问题进行“一次通过”。我只是不确定Python是如何深入研究它的。

我的假设

因为Python是解释的而不是编译的,所以通过将import语句嵌套在else块中,在到达该行之前不会导入这些库,从而节省系统资源,除非另有需要。

方案

我编写了一个脚本,这个脚本将被更多的计算机文化使用,而那些则更少。我的部门非常熟悉从命令行运行带有参数的脚本,所以我已经设置它来获取它需要的参数,如果它没有找到它期望的参数,它将启动带有标题,按钮的GUI,和更详细的说明。但是,这意味着我正在导入仅在未提供参数的情况下使用的库。

其他信息

  • GUI是非常非常基本的(六个文本字段和可能更少的按钮)所以我不关心只是创建和生成一个自定义GUI类,其中将导入必要的库。如果这变得更复杂,我将来会考虑它,甚至推动改变为web界面。
  • 我的脚本完全按照我的预期运行。问题只是资源消耗。

1 个答案:

答案 0 :(得分:5)

import语句在正常执行中遇到时执行,因此如果条件阻止执行该行,则不会执行导入,并且您将避免不必要的工作。

也就是说,如果模块将以其他方式导入(例如,无条件导入的模块B依赖于A,并且您有条件地导入A),节省的费用是微不足道的;在第一次导入模块之后,后续导入只获得对同一个缓存模块的新引用;导入机器必须先做一些复杂的事情来处理导入钩子等,但在通常情况下,它仍然相当便宜(导入已经缓存的模块时为亚微秒)。

这样可以省去任何东西的唯一方法是,如果有问题的模块不会以任何方式导入,在这种情况下你会避免加载它的工作和加载的模块使用的内存。