Python学习(六)模块 —— 包
Python 包
包 定义
为了组织好模块,会将多个模块分为包。Python 处理包也是相当方便的。简单来说,包就是文件夹,但该文件夹下必须存在 __init__.py 文件。
常见的包结构如下:
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQMAAABkCAIAAAANNcLKAAAEtklEQVR4nO2a3dKrIAxFff+XzrlgxuEIxNBSzeZb66oixvxtBaeHAYDZ8bYDAClACQBmKAGggBIAzFACQAElAJihBIACSgAwQwkABZQAYIYSAAooAcDs7yjhOI7j+CvBwgf8oeZACeDwh5oDJYDDH2oOlAAO2ZvjXN93F/pHxehUPeKc6to5/idyXycK9iqZEShM3UDdzvZPtdc6F46mBe878n9qPryCQFVuG/fyuB212vluGZ117IxeCLwWtkGgKh8/+1s7IzHcNr3jTwTnlQJJEKhKZPXijMcvnLUThNWRBAJV+WC9fvuuiNtpXwvsE7ZEoCrOCttZsreL/np1NJp8mXa5V8Sl2xDiV8GTCJTkrb7hWf6nyF7ddx+i8ad4+9Tn2a+FZKnoMFiOZEuhBFiOZEuhBFiOZEtto4TZvQR7j98hmdZtugEl5EEyrXRDCzn5Esn0UfUWcvIlkulzPt6PTq2a/4so2sHu2ZEbDzhpzcLscrsf3f1JJF2XzviFUWePJoxi/11OLh0/65gKkt6rJ72mq4T44e349zgOdBUiimQAG+T9BCUkQTKADfJ+soES9iiHZAx7pL6QRwmjLa+zN3CukkMyhk1S3/vm4xzefiP6sil9sxGdSCMZxjbZl8DP9ja1kAwjYfaPSVT8GU14LJDHkIxkpwJAEiRbCiXAciRbCiXAciRbaj8lRNbczyzN98ttEMmwt6xWMKjfxb7fJngKybC3rNbrSnjGflokw96yWijhXSTDdj6Kz35En50/5VL3rHOhNRuG9pKuG0Eng/7ELYwcPkemvHoXARdbcma2Ln/9w2nl7m+/9W979zY5s/YdO12fPzb4LhpeXsiZ3FklzI53D633Ogp6250/pYTR4SiWzMg4WpMzvy8q4WNXI/YjRkY2c1aqi4yjNTnzq6KEhauj0WE38OQo+XqSM8Xf7BOcNffr+4TRist5sThXpUXJ15OEKa7X3PWPy1mnYy5i6Fob2XHs+962N2rtOEpwbpqwRj5i7hbksrwlfhXkaiTmbkEuy8/TPvXjb4wp+8Hx/Oh5bCgBfoBkS6EEWI5kS6EEWI5kS+2nhMja+oEl+C92FCpIBrxlneIfQJ9xYMskO0hGu2WRUMK7SEa7ZZFQwrtIRut8LB+dWjV/yqXuWedCazYM7SVdN4JOxuff2vEdPkemvHoXARdbcma2Ln/9w2nl7m+/9bta8id8MD+S4UvHf+xPEjS8vJAzubNKmB3vHtrgT0QRb53XVNDC6HAUS2ZkHK3Jmd8XlfCxqxH7ESMjmzkr1UXG0Zqc+VVRQnC19r2dnGUaoeTrSc4Uf7NPcNbcj+0TnPHbvcRozeZ7kgolX08Sprhec9c/LmedjrmIoWttZMex73vb3qg15SjBuWnCGvmIuVuQy/KW+FWQq5GYuwW5LD9P+4CPvzGm7AfH86PnsaEE+AGSLYUSYDmSLYUSYDmSLYUSYDmSLYUSYDmSLYUSYDmSLYUSYDmSLeV8LB+dWjUfdoXqApihBIACSgAwQwkABZSwjNGuenYcXoFKLAMlSEMlAMxQAkABJQCYoQSAAkoAMEMJAAWUAGCGEgAKKAHADCUAFFACgBlKACj8A9zJwiqHijmKAAAAAElFTkSuQmCC" alt="" />
最简单的情况下,只需要一个空的 __init__.py 文件即可。当然它也可以执行包的初始化代码,或者定义稍后介绍的 __all__ 变量。当然包底下也能包含包,这和文件夹一样,还是比较好理解的。
导入包
包的导入仍使用 import 、 from ... import 语句,使用 “圆点模块名” 的结构化模块命名空间。 下面来看一个包的例子来了解下具体的运作。(官方文档中的例子)
假设你现在想要设计一个模块集(一个“包”)来统一处理声音文件和声音数据。存在几种不同的声音格式(通常由它们的扩展名来标识,例如: .wav, .aiff, .au )于是,为了在不同类型的文件格式之间转换,你需要维护一个不断增长的包集合。可能你还想要对声音数据做很多不同的操作(例如混音,添加回声,应用平衡 功能,创建一个人造效果)所以你要加入一个无限流模块来执行这些操作。你的包可能会是这个样子(通过分级的文件体系来进行分组):
aaarticlea/png;base64,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" alt="" />
用户可以每次只导入包里的特定模块,例如: 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 模块为例,可以引用如下:
from . import reverse # 同级目录 导入 reverse
from .. import frormats # 上级目录 导入 frormats
from ..filters import equalizer # 上级目录的filters模块下 导入 equalizer
多重目录包搜索
包支持一个更为特殊的特性, __path__ 在包的 __init__.py 文件代码执行前,该变量初始化一个目录名列表。作用于子包和模块的搜索功能。
该功能可以用于扩展包中的模块集,不过不常用。
Python学习(六)模块 —— 包的更多相关文章
- python学习之模块&包的引用
名词解释: 模块:一个程序文件 包:相当于一个类库,打包发布后相当于c#中的dll, 包中可包括若干个模块,比如main.py就是一个模块,对于test2文件下的所有模块组成一个包 对于一个包而言,注 ...
- Python第八天 模块 包 全局变量和内置变量__name__ Python path
Python第八天 模块 包 全局变量和内置变量__name__ Python path 目录 Pycharm使用技巧(转载) Python第一天 安装 shell 文件 Pyt ...
- Python学习--Selenium模块
1. Python学习--Selenium模块介绍(1) 2.Python学习--Selenium模块学习(2) 其他: 1. Python学习--打码平台
- Python学习--Selenium模块学习(2)
Selenium的基本操作 获取浏览器驱动寻找方式 1. 通过手动指定浏览器驱动路径2. 通过 `$PATH`环境变量找寻浏览器驱动 可参考Python学习--Selenium模块简单介绍(1) 控制 ...
- Python学习---重点模块的学习【all】
time [时间模块] import time # print(help(time)) # time模块的帮助 print(time.time()) # 时间戳 print(time.cloc ...
- python学习笔记-模块和包
模块导入方法 1.import 语句 import module1[,module2[,...moduleN]] 当我们使用import语句的时候,Python解释器是怎么找到对应对文件对呢?答案是解 ...
- python学习——常用模块
在学习常用模块时我们应该知道模块和包是什么,关于模块和包会单独写一篇随笔,下面先来了解有关在python中的几个常用模块. 一.什么是模块 常见的场景:一个模块就是一个包含了python定义和声明的文 ...
- Python学习之模块基础
模块就是程序 编写以下简单代码 print('hello python') 并将py文件保存在c盘的python(假设新建)文件下,通过pycharm的Terminal 或者windom命令窗口调出p ...
- Python学习之模块进程函数详解
今天在看<Beginning Linux Programming>中的进程相关部分,讲到Linux几个进程相关的系统函数: system , exec , fork ,wait . Pyt ...
- python学习日记(包——package)
简述——包 包是一种通过使用‘.模块名’来组织python模块名称空间的方式. 注意: 1. 无论是import形式还是from...import形式,凡是在导入语句中(而不是在使用时)遇到带点的,都 ...
随机推荐
- sicily 1154. Easy sort (tree sort& merge sort)
Description You know sorting is very important. And this easy problem is: Given you an array with N ...
- Web前端开发最佳实践(2):前端代码重构
前言 代码重构是业内经常讨论的一个热门话题,重构指的是在不改变代码外部行为的情况下进行源代码修改,所以重构之前需要考虑的是重构后如何才能保证外部行为不改变.对于后端代码来说,可以通过大量的自动化测试来 ...
- python开发学习-day05(正则深入、冒泡排序算法、自定义模块、常用标准模块)
s12-20160130-day05 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: ...
- js过滤检测敏感词汇
html: <textarea rows="10" cols="100" id="myDiv"></textarea> ...
- oracle创建计划任务
特别提示: oracle是执行完任务,才按照interval去计算下次执行时间!!! 为精确每个5分钟执行一个任务,必须自己计算时间. 如:trunc_minute(sysdate)+/ create ...
- volatile 的一个经典例子
volatile 关键字的两层语义 一旦一个共享变量(类的成员变量.类的静态成员变量)被 volatile 修饰之后,那么就具备了两层语义: 1)保证了不同线程对这个变量进行操作时的可见性,即一个线程 ...
- 洛谷——P1821 [USACO07FEB]银牛派对Silver Cow Party
P1821 [USACO07FEB]银牛派对Silver Cow Party 题目描述 One cow from each of N farms (1 ≤ N ≤ 1000) conveniently ...
- 关于 devbridge
目前据我所知最好用的 autocomplete 插件就是 jquery-ui 的 autocomplete 以及 devbridge 的 autocomplete 插件. 我最终选择了 devbrid ...
- Wannafly挑战赛17 B
题解 大概就是求证这个 \[\sum_i^nC_{n}^i*C_n^i = C_{2n}^n\] 证明: \[(1+x)^{2n} = [C(0,n)+C(1,n)*x+...+C(n,n)*x^n] ...
- 【manacher+FFT】BZOJ3160-万径人踪灭
[题目大意] 在一个仅仅含有a,b的字符串里选取一个子序列,使得: 1.位置和字符都关于某条对称轴对称: 2.不能是连续的一段. [思路] 不连续的回文串的个数=总的回文串个数-连续回文串的个数. 后 ...