返回介绍

包导入实例

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

让我们实际编写刚才所谈的例子,来说明初始化文件和路径是如何运作的吧。下列三个文件分别位于目录dir1和dir1的子目录dir2中——这些文件的路径名在注释中给出:

这里,dir1要么是我们工作所在目录(也就是主目录)的子目录,要么就是位于模块搜索路径中(技术上就是sys.path)的一个目录的子目录。无论哪一种,dir1的容器都不需要__init__.py文件。

当Python向下搜索路径时,import语句会在每个目录首次遍历时,执行该目录的初始化文件。print语句加在这里,用来跟踪它们的执行。此外,就像模块文件一样,任何已导入的目录也可以传递给reload,来强制该项目重新执行。就像这里展示的那样,reload可以接受点号路径名称,来重载嵌套的目录和文件。

导入后,import语句内的路径会变成脚本的嵌套对象路径。在这里,mod是对象,嵌套在对象dir2中,而dir2又嵌套在对象dir1中。

实际上,路径中的每个目录名称都会变成赋值了模块对象的变量,而模块对象的命名空间则是由该目录内的__init__.py文件中所有赋值语句进行初始化的。dir1.x引用了变量x,x是在dir1\__init__.py中赋值的,而mod.z引用的变量z则是在mod.py内赋值的。

包对应的from语句和import语句

import语句和包一起使用时,有些不方便,因为你必须经常在程序中重新输入路径。例如,上一节的例子中,每次要得到z时,就得从dir1开始重新输入完整路径,并且每次都要重新执行整个路径。如果你想要尝试直接读取dir2或mod,就会得到一个错误。

因此,让包使用from语句,来避免每次读取时都得重新输入路径,通常这样比较方便。也许更重要的是,如果你重新改变目录树结构,from语句只需在程序代码中更新一次路径,而import则需要修改很多地方。import作为一个扩展功能(下一章讨论),在这里也有一定的帮助,它提供一个完整路径较短的同义词:

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

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

发布评论

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