转载自https://www.cnblogs.com/feeland/p/4401758.html

Python 包

包 定义

为了组织好模块,会将多个模块分为包。Python 处理包也是相当方便的。简单来说,包就是文件夹,但该文件夹下必须存在 __init__.py 文件。

常见的包结构如下:

最简单的情况下,只需要一个空的 __init__.py 文件即可。当然它也可以执行包的初始化代码,或者定义稍后介绍的 __all__ 变量。当然包底下也能包含包,这和文件夹一样,还是比较好理解的。

导入包

包的导入仍使用 import 、 from ... import 语句,使用 “圆点模块名” 的结构化模块命名空间。 下面来看一个包的例子来了解下具体的运作。(官方文档中的例子)

假设你现在想要设计一个模块集(一个“包”)来统一处理声音文件和声音数据。存在几种不同的声音格式(通常由它们的扩展名来标识,例如: .wav, .aiff, .au )于是,为了在不同类型的文件格式之间转换,你需要维护一个不断增长的包集合。可能你还想要对声音数据做很多不同的操作(例如混音,添加回声,应用平衡 功能,创建一个人造效果)所以你要加入一个无限流模块来执行这些操作。你的包可能会是这个样子(通过分级的文件体系来进行分组):

用户可以每次只导入包里的特定模块,例如: import sound.efforts.echo   这样就导入了 sound.effects.echo 子模块。它必须通过完整的名称来引用:

sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)

导入包时有一个可以选择的方式: from sound.effects import echo   这样就加载了 echo 子模块,并且使得它在没有包前缀的情况下也可以使用,所以它可以如下方式调用:

echo.echofilter(input, output, delay=0.7, atten=4)

还有另一种变体用于直接导入函数或变量: from sound.effects.echo import echofilter   这样就又一次加载了 echo 字模块,但这样就可以直接调用它的 echofilter() 函数:

echo.echofilter(input, output, delay=0.7, atten=4)

需要注意的是  from package import item    方式导入包时,这个子项(item)既可以是子包也可以是其他命名,如函数、类、变量等。若无,会引发ImportError异常。

而用类似 import item.subitem.subsubitem 这样的语法时,这些子项必须是包,最后的子项可以是包或模块,但不能是类、函数、变量等。

从 * 导入包

import * 这样的语句理论上是希望文件系统找出包中所有的子模块,然后导入它们。这可能会花长时间,并出现边界效应等。Python 解决方案是提供一个明确的包索引。

这个索引由 __init__.py  定义 __all__ 变量,该变量为一列表,如上例 sound/effects 下的 __init__.py 中,可定义  __all__ = ["echo","surround","reverse"]

这意味着,  from sound.effects import *   会从对应的包中导入以上三个子模块; 尽管提供 import * 的方法,仍不建议在生产代码中使用这种写法。

包内引用

如果是子包内的引用,可以按相对位置引入子模块 以 echo 模块为例,可以引用如下:

1 from . import reverse # 同级目录 导入 reverse

2 from .. import frormats # 上级目录 导入 frormats

3 from ..filters import equalizer # 上级目录的filters模块下 导入 equalizer

多重目录包搜索

包支持一个更为特殊的特性, __path__  在包的 __init__.py 文件代码执行前,该变量初始化一个目录名列表。作用于子包和模块的搜索功能。

该功能可以用于扩展包中的模块集,不过不常用。

python处理包_Python 包相关推荐

  1. python镜像下载包_python包详解

    干货大礼包!21天带你轻松学Python(文末领取更多福利) 点击查看课程视频地址 本课程来自于千锋教育在阿里云开发者社区学习中心上线课程<Python入门2020最新大课>,主讲人姜伟. ...

  2. python典型安装_python包的多种安装方式(内网)

    在matplotlib-3.2.2.tar.gz(40.3 MB)),一种是以whl结尾的文件(matplotlib-3.2.2-cp36-cp36m-manylinux1_x86_64.whl(12 ...

  3. anaconda下载的python在哪_python包管理器anaconda介绍安装和使用

    在Python中,安装第三方模块,是通过包管理工具pip完成的.用pip一个一个安装费时费力,还需要考虑兼容性.我们推荐直接使用anaconda,这是一个基于Python的数据处理和科学计算平台,它已 ...

  4. python networkx案例_Python包 - networkx

    networkx是Python的一个包,用于构建和操作复杂的图结构,提供分析图的算法.图是由顶点.边和可选的属性构成的数据结构,顶点表示数据,边是由两个顶点唯一确定的,表示两个顶点之间的关系.顶点和边 ...

  5. python wget安装_python包的安装及依赖-pip wget pipdeptree

    本文介绍主要的两种安装python包的方式,pip 和 wget,同时考虑到安装包时,会同时安装相关依赖,也简单介绍下 pipdeptree . 1.pip 安装包直接使用命令: pip instal ...

  6. python导入包相当于什么_Python包及其定义和引用详解

    对于一个需要实际应用的模块而言,往往会具有很多程序单元,包括变量.函数和类等,如果将整个模块的所有内容都定义在同一个 Python 源文件中,这个文件将会变得非常庞大,显然并不利于模块化开发. 什么是 ...

  7. python开发专属表情包_Python开发个人专属表情包网站

    "表情包"是一种利用图片来表示感情的一种方式.表情包是在社交软件活跃之后,形成的一种流行文化,表情包流行于互联网上面,基本人人都会发表情. 曾经你是否也有过找不到表情包去应对别人的 ...

  8. python 聚类算法包_Python聚类算法之DBSACN实例分析 python怎么用sklearn包进行聚类

    python 怎么可视化聚类的结果 science 发表的聚类算法的python代码 测试数据长什...说明你的样本数据中有nan值,通常是因为原始数据中包含空字符串或None值引起的. 解决办法是把 ...

  9. 人生苦短我学python表情包_Python自动生成表情包

    原标题:Python自动生成表情包 源| 创业智库文| 唐一 作为一个数据分析师,应该信奉一句话----"一图胜千言".不过这里要说的并不是数据可视化,而是一款全民向的产品形态-- ...

最新文章

  1. grafana 监控mysql_Prometheus+Grafana监控MySQL性能
  2. Xamarin.FormsShell基础教程(4)Shell项目内容列表页面运行效果
  3. Python map, reduce, filter和sorted
  4. 日常生活 -- 嵌入式再学习前言
  5. jsp学习(1)jsp请求过程和生命周期
  6. SSD硬盘 全盘安全擦除
  7. 吹气球问题的C语言编程,C语言怎样给一个数组中的数从大到小排序
  8. 51Nod - 1183 编辑距离
  9. C++学习之路 | PTA乙级—— 1010 一元多项式求导 (25分)(精简)
  10. 高德地图安卓 拖拽选点_行车记录仪当“眼睛” 高德地图手机AR导航再次升级...
  11. 牛客网--华为机试在线训练10:字符个数统计
  12. mysql 事务、隔离级别
  13. java为什么要设计包装类_Java 为什么需要包装类
  14. 网易严选数据产品实践
  15. win10定时语音提醒
  16. Docker WordPress安装
  17. 论文代码复现|并行无人机的调度优化问题PDSTSP
  18. 如何去除图片上的文字(PS使用教程)
  19. MySQL 8.0 安装教程
  20. mac安装mysql方法

热门文章

  1. 探索SQL Server数据库的DATABASEPROPERTYEX()函数
  2. 深入解析Koa之核心原理
  3. iOS:动画(18-10-15更)
  4. RTSP协议播放网络视频
  5. Prototype(原型模式)
  6. [预告]将要推出编程方式事务管理祥解!
  7. mysql 中ak_数据库ak
  8. 为什么选用自增量作为主键索引
  9. Tomcat性能监控LambdaProbe
  10. 差距只是客观存在的事实,与服不服无关。