《Python语言程序设计》 —3.3.3 包

举报
华章计算机 发表于 2019/11/18 21:03:42 2019/11/18
【摘要】 本节书摘来自华章计算机《Python语言程序设计》一书中第3章,第3.3.3节,作者是王恺 王志 李涛 朱洪文。

3.3.3 包

Python中的包(package)的作用与操作系统中文件夹的作用相似,利用包可以将多个关系密切的模块组合在一起,一方面便于进行各脚本文件的管理,另一方面可以有效避免模块命名冲突问题。

定义一个包,就是创建一个文件夹并在该文件夹下创建一个__init__.py文件,文件夹的名字就是包名。另外,可以根据需要在该文件夹下再创建子文件夹,在子文件夹中创建一个__init__.py文件,则又形成了一个子包。模块可以放在任何一个包或子包中,在导入模块时,需要指定所在的包和子包的名字。例如,如果要导入包A中的模块B,则需要使用import A.B。

提示 __init__.py可以是一个空文件,也可以包含包的初始化代码或者设置__all__列表。

下面通过Python官方文档中的一个例子理解包的结构和使用方法。此处给出的是关于声音数据处理的包结构,如下所示:

sound/ 顶级包

    __init__.py 初始化这个声音包

    formats/ 文件格式转换子包

             __init__.py

             wavread.py

             wavwrite.py

             aiffread.py

             aiffwrite.py

             auread.py

             auwrite.py

             ...

    effects/ 音效子包

             __init__.py

             echo.py

             surround.py

             reverse.py

             ...

    filters/ 过滤器子包

             __init__.py

             equalizer.py

             vocoder.py

             karaoke.py

             ...

如果要使用sound包的effects子包的echo模块,可以通过下面的方式导入:

import sound.effects.echo

假设在echo模块中有一个echofilter函数,则调用该函数时必须指定完整的名字(包括各层的包名和模块名),即:

sound.effects.echo.echofilter(实参列表)

也可以使用from import方式导入包中的模块,如:

from sound.effects import echo

通过这种方式,也可以正确导入sound包的effects子包的echo模块,而且在调用echo模块中的函数时不需要加包名,如:

echo.echofilter(实参列表)

使用from import也可以直接导入模块中的标识符,如:

from sound.effects.echo import echofilter

这里直接导入了echo模块中的echofilter函数,此时调用echofilter函数可直接写作:

echofilter(实参列表)

提示 本书作为一本入门级教材,只介绍了包和模块的一些基本用法。读者可通过分析一个开源项目的程序结构和代码实现来掌握应该如何设计和编写较大规模的程序。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。