python 包

news/2024/11/28 6:54:06/

包 定义:

为了组织好模块,会将多个模块分为包。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 文件代码执行前,该变量初始化一个目录名列表。作用于子包和模块的搜索功能。
    该功能可以用于扩展包中的模块集,不过不常用。


http://www.ppmy.cn/news/141159.html

相关文章

手提电脑如何截图?

怎么能用到手提电脑上的prtsc键截图? 怎么能用到手提电脑上的prtsc键?我的prtsc键与insert一起, 一个键上标了prtsc与insert,prtsc写在键的下部分,在insert的下面。 要实现prtsc键的功能很简单,按住本本上的…

随身计算机的硬盘是该换了,手提电脑硬盘可以换吗

硬盘有固态硬盘(SSD 盘,新式硬盘)、机械硬盘(HDD 传统硬盘)、混合硬盘(HHD 一块基于传统机械硬盘诞生出来的新硬盘)。下面是学习啦小编带来的关于手提电脑硬盘可以换吗的内容,欢迎阅读! 手提电脑硬盘可以换吗? 首先硬盘一点,只要你电脑里用的是硬盘就可以换。 现在的笔记本…

包包,我的包包。。

可爱的星座MM永远都缺一件衣服,一双鞋子,一支口红,当然,也缺一个可爱的包包。下面来看看为大家苦心搜罗的各种包包,希望可以清凉各位的眼球,暂时弥补空缺哦。 白羊座 适合白羊MM的包包 温暖的针织包包。纯净…

python包_Python包

python包 Today we are going to learn about Python Package. Before proceeding to this tutorial you should have knowledge about Python Modules which you can find it here. 今天,我们将学习Python包。 在继续本教程之前,您应该了解有关Python模…

Pytorch入门(三)深度学习模型的训练的基本步骤

文章目录 一、修改现有的网络模型二、模型的保存三、模型的加载四、模型的评估五、训练模型的完整套路六、使用GPU加速模型的训练七、模型训练完整的验证套路 一、修改现有的网络模型 import torchvision from torch import nn # pretrained 为True时会自动下载模型所对应的权…

为便于管理大型软件系统中数目众多的类,解决类的命名冲突问题,java引入包(package)机制, 提供类的多重类命名空间。 package语句作为java源文件的第一条语句,指明该文件中定义的类所在的包。若缺省&#x…

最佳Android系统 | 运行在台式机、笔记本手提电脑的安卓Android系统

最佳Android系统 | 运行在台式机、笔记本手提电脑的安卓Android系统 适用于PC 2019的最佳Android操作系统 2022年2月1日 团队技术探索 Android 您是否知道,即使有几个升级版本,如Windows 10和10.1,即使这样,Android应用程序也在…

背包相关

ACM模版 背包相关 const int MAXN 101; const int SIZE 50001;int dp[SIZE]; int volume[MAXN], value[MAXN], c[MAXN]; int n, v; // 总物品数,背包容量// 01背包 void ZeroOnepark(int val, int vol) {for (int j v ; j > vol; j--){dp[j] m…