返回介绍

模块包

发布于 2024-05-19 19:37:09 字数 5340 浏览 0 评论 0 收藏 0

1.import时,也可以指定目录。目录称为包,这类的导入称为包导入。

  • 包导入是将计算机上的目录变成另一个Python命名空间,它的属性对应于目录中包含的子目录和模块文件
  • 包导入的语法:

      import dir1.dir2.modname
      from dir1.dir2.modname import x
    

    包导入

  • 包导入语句的路径中,每个目录内部必须要有__init__.py这个文件。否则包导入会失败

    • __init__.py就像普通模块文件,它可以为空的
    • Python首次导入某个目录时,会自动执行该目录下__init__.py文件的所有程序代码
    • import dir1.dir2.modname包导入后,每个目录名都成为模块对象 (模块对象的命名空间由该目录下的__init__.py中所有的全局变量定义 (包含显式定义和隐式定义)决定)
    • __init__.py中的全局变量称为对应目录包的属性

    __init__.py

2.任何已导入的目录包也可以用reload重新加载,来强制该目录包重新加载

reload一个目录包的用法与细节与reload一个模块相同

reload包

3.包与import使用时输入字数较长,每次使用时需要输入完整包路径。可以用from语句来避免
import包与from包区别

4.包相对导入:from语句可以用...

  from . import modname1 #modname1与本模块在同一包中(即与本文件在同一目录下)
  from .modname1 import name #modname1与本模块在同一包中(即与本文件在同一目录下)
  from .. import modname2 #modname2在本模块的父目录中(即在本文件上层)

Python2中,import modname会优先在本模块所在目录下加载modname以执行相对导入。 因此局部的模块可能会因此屏蔽sys.path上的另一个模块
要想启用相对导入功能,使用from __future__ import absolute_import

  • Python3中,没有点号的导入均为绝对导入。import总是优先在包外查找模块
    包相对导入

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

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

发布评论

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