返回介绍

import 如何工作

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

上一节谈到了导入模块,然而并没有实际解释当你这么做时都发生了什么。因为导入是Python中程序结构的重点所在,本节要深入讨论导入这个操作,让这个流程尽量不再那么抽象。

有些C程序设计者喜欢把Python的模块导入操作比作C语言中的#include,但其实不应该这么比较:在Python中,导入并非只是把一个文件文本插入另一个文件而已。导入其实是运行时的运算,程序第一次导入指定文件时,会执行三个步骤。

1.找到模块文件。

2.编译成位码(需要时)。

3.执行模块的代码来创建其所定义的对象。

要对模块导入有更好的理解,我们将会逐一探索这些步骤。记住,这三个步骤只在程序执行时,模块第一次导入时才会进行。在这之后,导入相同模块时,会跳过这三个步骤,而只提取内存中已加载的模块对象。从技术上讲,Python把载入的模块存储到一个名为sys.modules的表中,并在一次导入操作的开始检查该表。如果模块不存在,将会启动一个三个步骤的过程。

1.搜索

首先,Python必须查找到import语句所引用的模块文件。注意:上一节例子中的import语句所使用的文件名中没有a.py,也没有目录路径,只有import b,而不是import c:\dir1\b.py。事实上,只能列出简单名称。路径和后缀是刻意省略掉的,因为Python使用了标准模块搜索路径来找出import语句所对应的模块文件[1]。因为这是程序员对于import操作所必须了解的主要部分,我们就仔细研究这个步骤吧。

[1]在标准的import中引入路径和后缀名等细节,从语法上讲是非法的。第23章讨论的包导入,可以让import语句在文件开头引入目录路径部分,成为一组以点号相隔的变量名。然而,包的导入依然依赖普通模块搜索路径,来找出包路径最左侧的目录(也就是相对于搜索路径中的目录)。包导入也不能在import语句中使用平台特定的目录语法;这类语法只能使用在搜索路径上。此外,值得注意的是,当冻结可执行文件时(在第2章讨论过),就不关心模块文件搜索路径的问题了,因为这种可执行文件通常是把字节码嵌入到二进制代码中。

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

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

发布评论

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