python - Python import 是否将所有代码复制到文件中

标签 python python-3.x import module sys.path

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

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

最佳答案

这些事情都不是事实。

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

其次,导入会绑定(bind)所请求的任何名称。 importwhateverwhatever 名称绑定(bind)到 whatever 模块对象。 importwhatever.thing 还将 whatever 名称绑定(bind)到 whatever 模块对象。 fromwhateverimportsomefunc 查找 whatever 模块对象上的 somefunc 属性,并将 somefunc 名称绑定(bind)到任何属性查找发现。

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

关于python - Python import 是否将所有代码复制到文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55819621/

相关文章:

python - 用 python 来 Ping 一个带有不和谐机器人的网站

python - 我可以只为一个函数导入,而将其余的按原样导入吗?

java - 插入一个属性文件,其中的 MySQL 凭据在作为 Java 应用程序运行时显示,但在作为 WebService 运行时显示为空

python - 为什么当我将正确的 .kv 代码放入外部 .kv 文件时,使用 screenmanager 的 .kv 代码不起作用?

python - for line in json 对象每行返回一个字符

python - Telegram bot.polling() 上的 socket.timeout

python - 在 python 2.7 中导入 Pandas 时出现 "ValueError: unknown locale: UTF-8"

python - 使用 pytest,为什么继承的测试方法不能给出正确的断言输出?

python - Pandas 中 transpose() 和 .T 的区别

python - 标准库中的所有内容都会在 Python 3.0 中将字符串视为 unicode 吗?