Python 导入是否将所有代码复制到文件中



当我们在 Python 脚本中导入模块时,这是将所有必需的代码复制到脚本中,还是只是让脚本知道在哪里可以找到它?

如果我们在代码中不使用模块会发生什么,它是否会以某种方式被优化出来,就像在 C/C++ 中一样?

这些都不是这样。

导入执行两件事。首先,如果以前未加载请求的模块,则导入将加载模块。这主要归结为创建一个新的全局作用域,并在该作用域中执行模块的代码以初始化模块。新的全局作用域用作模块的属性,以及模块中任何代码的全局变量查找。

其次,导入绑定了所要求的任何名称。 import whateverwhatever名称绑定到whatever模块对象。 import whatever.thing还将whatever名称绑定到whatever模块对象。 from whatever import somefuncwhatever模块对象上查找 somefunc 属性,并将somefunc名称绑定到属性查找找到的任何内容。

无法优化未使用的导入,因为模块加载和名称绑定都具有某些其他代码可能依赖的效果。

最新更新