当我们在 Python 脚本中导入模块时,是将所有必需的代码复制到脚本中,还是只是让脚本知道在哪里找到它?
如果我们在代码中不使用该模块,会发生什么情况,它是否会以某种方式得到优化,就像在 C/C++ 中一样?
最佳答案
这些事情都不是事实。
导入会做两件事。首先,如果先前未加载所请求的模块,则导入加载该模块。这主要归结为创建一个新的全局作用域并在该作用域中执行模块的代码以初始化模块。新的全局范围用作模块的属性,以及模块中任何代码的全局变量查找。
其次,导入会绑定(bind)所请求的任何名称。 importwhatever
将 whatever
名称绑定(bind)到 whatever
模块对象。 importwhatever.thing
还将 whatever
名称绑定(bind)到 whatever
模块对象。 fromwhateverimportsomefunc
查找 whatever
模块对象上的 somefunc
属性,并将 somefunc
名称绑定(bind)到任何属性查找发现。
未使用的导入无法优化,因为模块加载和名称绑定(bind)都会产生其他某些代码可能依赖的效果。
关于python - Python import 是否将所有代码复制到文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55819621/