python中包的理解与运用?

Python010

python中包的理解与运用?,第1张

6.4. 包

包通常是使用用“圆点模块名”的结构化模块命名空间。例如,名为 A.B 的模块表示了名为 A 的包中名为 B 的子模块。正如同用模块来保存不同的模块架构可以避免全局变量之间的相互冲突,使用圆点模块名保存像 NumPy 或 Python Imaging Library 之类的不同类库架构可以避免模块之间的命名冲突。

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

当导入这个包时,Python 通过 sys.path 搜索路径查找包含这个包的子目录。

为了让 Python 将目录当作内容包,目录中必须包含 __init__.py 文件。这是为了避免一个含有烂俗名字的目录无意中隐藏了稍后在模块搜索路径中出现的有效模块,比如 string。最简单的情况下,只需要一个空的 __init__.py 文件即可。当然它也可以执行包的初始化代码,或者定义稍后介绍的 __all__ 变量。

用户可以每次只导入包里的特定模块,例如:

import sound.effects.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() 函数:

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

需要注意的是使用 from package import item 方式导入包时,这个子项(item)既可以是包中的一个子模块(或一个子包),也可以是包中定义的其它命名,像函数、类或变量。import 语句首先核对是否包中有这个子项,如果没有,它假定这是一个模块,并尝试加载它。如果没有找到它,会引发一个 ImportError 异常。

Python中将算式称为表达式。数学上算式是用数学语言、数学符号来表达某种关系、某种运算、某种性质的,同样的,在Python中,表达式也是用运算符将各种数据类型的数据连接起来。

数据的类型在前面已经介绍过了,下面介绍一些最常用到的运算符。

6.1算术运算

算术运算符是用于处理四则运算的运算符,常用的算术运算符如下表所示。

算术表达式就是用算术运算符将各种类型的数据连接起来,算术运算的规则和数学中一致。除了数学中用到的四则运算符“ 、-、*、/ ”外,要特别注意“取模(%)”、“幂(**)”、“整除(//)”的用法。

6.2给变量赋值

最常用的赋值运算符是“=”,“a=b”的意思就是将值b赋值给变量a。

Python中还一些带有运算功能的赋值方法,含义为“先计算,后赋值”如:

以下假设变量:a=10,b=20

“+=”,读作“加赋值”,如a+=b,相当于a=a+b, 则a被赋值为30;

“-=”,读作“减赋值”,如a-=b,相当于a=a-b, 则a被赋值为-10;

“*=”,读作“乘赋值”,如a*=b,相当于a=a*b, a被赋值为200;

“/=”,读作“除赋值”,如a/=b,相当于a=a/b, a被赋值为0.5;

“%=”,读作“取余数赋值”,如a%=b,相当于a=a%b, a被赋值为10;

“**=”,读作“幂赋值”,如a**=b,相当于a=a**b, a被赋值为100000000000000000000;

“//=”,读作“取整数赋值”,如a//=b,相当于a=a//b, a被赋值为0;

6.3关系运算

关系运算符,也叫比较运算符,用于比较两个变量或表达式运算结果之间的大小关系。关系表达式是用关系运算符将变量或表达式连接起来的表达式,其运算结果为一个布尔值,即True或False。

Python3.0的关系运算符有:“大于>”、“小于=”、“小于或等于<=”。

还有一个特殊的关系运算符“值1变量值2”,如:

>>>a=10

>>>b=20

>>>c=15

>>>print(a<b<c) p=""></b<c)>

False

>>>print(a<c<b) p=""></c<b)>

True

6.4逻辑运算

逻辑运算符包括“逻辑与and”、“逻辑或or”、“逻辑非not”,具体用法见下表。

以下假设变量 a 为 10, b为 20:

在上表中,变量a和变量b都是非0的数,被当做值为True的变量参与逻辑运算。