Python的Module和Package

来源:互联网 发布:qq群发软件sudm 编辑:程序博客网 时间:2024/05/01 00:06

Module
Python module就是一个普通的python脚本,也就是.py文件。Module让我们更好的组织相关的代码。例如,我们可以把数学运算相关的函数,变量,类等都放入math module。

创建一个mymodule.py文件,就定义了一个名为mymodule的module:

foo = 100 def hello():print("i am from mymodule.py")

在其他python代码中,我们可以很方便导入这个module并使用其中的代码:

import mymoduleprint(mymodule.foo)print(mymodule.hello())

如果不想导入module中的所有逻辑,仅仅想导入一部分,则使用“from”关键字:

from mymodule import foo # 仅使用foo变量print(foo)

Package
Package是用来组织项目中module的一种命名空间。同时Package可以是多层级结构,在文件系统中以多层目录的形式表达。
例如一个module名为A.B则意味着,module B属于package A。又如一个module名为A.B.C则意味着,A为第一级package,B为第二级package,C为module名称。
下面是一个package组织关系的例子:

sound/                          Top-level package  __init__.py               Initialize the sound package  formats/                            __init__.py          wavread.py          wavwrite.py          ...  effects/                  Subpackage for sound effects          __init__.py          echo.py          ...  filters/                  Subpackage for filters          __init__.py          equalizer.py          vocoder.py          ...

可以注意到每层package目录下都有一个init.py文件。Python发现init.py文件,就知道这是一个package。当导入一个package时,Python会查找sys.path中的所有目录和子目录。
大多数情况下init.py是空的,但也可以加入package初始化代码。这样当package被引用时,初始化代码会被执行。
用户可以导入package下特定的module:

import sound.formats.wavread

另外一种写法:

from sound.formats import wavread

也可以导入特定module中的函数:

from sound.formats.wavread import echofilter

init.py中使用all参数:

__all__ = ["echo", "surround", "reverse"]

上面的语句表示,当运行”from sound.effects import *“时,仅导入”echo”, “surround”, “reverse”3个module

0 0
原创粉丝点击