• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
龙三少
博客园    首页    新随笔    联系   管理    订阅  订阅

包

包

一、什么是包

​ 包是模块的一种形式,包其实是一个文件夹(必须得含有__init__.py这个文件)。

二、为什么要用包

​ 包的本质就是一个文件夹,那么文件夹唯一的功能就是将文件组织起来,随着功能越写越多,我们无法将所有功能都放在一个文件夹中,于是我们使用模块去组织功能,随着模块越来越多,我们就需要用文件夹将模块文件包组织起来,以此来提高程序的结构性和可维护性。

三、__init__.py是干什么的

不论我们使用哪种方式导入一个包, 只要是第一次导入包或者是包的任何其他部分, 都会先执行__init__.py文件.这个文件可以是空的, 但是也可以存放一些初始化的代码.那么我们之前用的from xxx import * 能用在包的调用上吗?可以,我们要在__init__.py文件中给出__all__来确定*导入的内容。

img

比较抽象,我们包里面的文件大概就是这样的,我们需要在m1.py这样的文件中定义一些函数,假如在bbb文件中需要导入m1.py中的某个函数from ..aaa import f1 ,bbb这个文件是找不到m1.py这个文件的,他只能找到aaa,而aaa必须先要找到 __init__只有通过__init__才能找到m1.py里面的函数。

四、相对导入和绝对导入

你可能会很疑惑上面from ..aaa import f1中的..是什么意思,接下来就可以解决你的疑惑。

4.1 绝对导入:

from aaa.m1 import f1
from aaa.m2 import f2

4.2 相对导入:

from ..m1 import f1
from ..m2 import f2
  • .代表当前被导入文件所在的文件夹
  • ..代表当前被导入文件所在的文件夹的上一级(父目录)
  • ...代表当前被导入文件所在的文件夹的上一级的上一级(爷爷目录)

重点

  • 导包就是导入__init__
  • 包的文件以执行文件的环境变量为基准
  • 包的init只能从包名开始导入
  • 相对导入 只能在包中使用
posted @ 2019-08-16 21:42  柠檬要加醋  阅读(115)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3