Python 究竟什么时候导入?

When exactly does Python import?

问题

如果我在 if/else 块中嵌套了 import 语句,我是否提高了效率?我知道有些语言会 "one passes" 处理 import 和语法问题的代码。我只是不确定 Python 有多深入。

我的假设

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

场景

我已经编写了一个脚本,该脚本将被更多计算机知识和较少计算机知识的人使用。我的部门对命令行中带有参数的 运行 脚本非常满意,因此我将其设置为根据需要获取参数,如果它找不到预期的参数,它将启动一个 GUI标题、按钮和更详细的说明。但是,这意味着我导入的库仅在未提供参数的情况下使用。

附加信息

import 语句按照它们在正常执行中遇到的方式执行,因此如果条件阻止该行被执行,则导入不会发生,并且您将避免不必要的工作。

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

如果有问题的模块不会以其他任何方式导入,那么这将为您节省任何东西的唯一方法,在这种情况下,您可以避免加载它的工作以及加载模块使用的内存。