返回介绍

3.运行

发布于 2024-01-29 22:24:16 字数 727 浏览 0 评论 0 收藏 0

import操作的最后步骤是执行模块的字节码。文件中所有语句会依次执行,从头至尾,而此步骤中任何对变量名的赋值运算,都会产生所得到的模块文件的属性。因此,这个执行步骤会生成模块代码所定义的所有工具。例如,文件中的def语句会在导入时执行,来创建函数,并将模块内的属性赋值给那些函数。之后,函数就能被程序中这个文件的导入者来调用。

因为最后的导入步骤实际上是执行文件的程序代码,如果模块文件中任何顶层代码确实做了什么实际的工作,你就会在导入时看见其结果。例如,当一个模块导入时,该模块内顶层的print语句就会显示其输出。函数的def语句只是简单地定义了稍后使用的对象。

正如你所见到的那样,import操作包括了不少的操作:搜索文件、或许会运行一个编译器以及执行Python代码。因此,任何给定的模块在默认情况下每个进程中只会导入一次。未来的导入会跳过导入的这三个步骤,重用已加载内存内的模块[1]。如果你在模块已加载后还需要再次导入(例如,为了支持终端用户的定制),你就得通过调用reload(下一章我们将会学到的一个工具)强制处理这个问题。

[1]正如前面所介绍的,Python已经导入的模块保存在一个内置的sys.modules字典中,以便可以记录哪些已经导入了。实际上,如果想要看看已经导入了哪些模块,可以导入sys并打印list(sys.modules.keys())。关于这一内部表的更多用法可参见第24章。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文