您的“关注”和“点赞”,是信任,是认可,是支持,是动力…
如意见相佐,可留言。
本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新。
文章目录
1 Python 包概述
包(Package)是用来管理 Python 模块(《Python 模块详解》)的命名空间的一种方式。
在日常开发中,一个大项目往往需要使用成百上千的 Python 模块,如果将这些模块都放在一起,势必 Super 难管理。
使用包将这些模块进行分类,将会便于管理;还可以有效的避免模块名重名引发的冲突。
可以这么理解,包就是一个文件夹,只不过文件夹中包含的是多个模块(.py 文件)。包的本质依然是模块,包中可以有包。
Python 包中还要添加一个 __init__.py
模块(Python 3.x 中,不是必须的),表示告诉 Python 要将该目录当做包来处理,可以是一个空模块;也可以添加一些代码,当有其它程序文件(模块)导入该包时,会自动执行该文件中的代码。注意:__init__.py
模块跟其他模块是有区别的,区别在于此模块的模块名不是 __init__
,而是它所在的包名。
举例如下所示:
简单模拟了一个包和模块之间的结构图(若有雷同,纯属巧合)
audio/ 顶层包
__init__.py 初始化 audio 包,此模块的模块名为 audio,而不是 __init__
formats/ 文件格式转换子包
__init__.py
wread.py
wwrite.py
aread.py
awrite.py
effects/ 声音效果子包
__init__.py
echo.py
surround.py
reverse.py
filters/ 过滤器子包
__init__.py
equalizer.py
vocoder.py
2 Python 包的创建
包就是一个包含 __init__.py
文件和其他模块的文件夹。
创建包,如下步骤所示,
- 第一:新建一个文件夹,起个名,该名就是包名。
- 第二:在该文件夹中,创建一个
__init__.py
文件(模块)。
创建好包后,就可以添加该包需要管理的其他模块(也可以再添加包)了。
举例如下所示:
创建一个名为 demo_package
的包,结构如下所示
demo_package/ 包名
__init__.py __inin__.py 文件,demo_package 模块
module1.py 其他模块
module2.py
module3.py
...
3 Python 包的导入
包本质上还是模块,因此导入模块的语法同样也适用于导入包。
Python 包的导入方法可归结为以下三种:
import 包名[.模块名 [as 别名]]
对以上格式说明,
- 用
[]
方括号括起来的部分,是可选部分,可有可无。 - 包被导入的同时,会在该包(被导入的包)的目录下生成一个
__pycache__
目录,目录中包含__init__.cpython-36.pyc
文件。 - 通过此语法格式导入包中的指定模块后,在使用该模块中的成员(变量、函数、类)时,需添加
包名.模块名
为前缀。 - 如果使用
as
给包名.模块名
起一个别名的话,就直接使用这个别名作为前缀使用该模块中的成员。 - 直接导入指定包时,程序会自动执行该包所对应文件夹下的
__init__.py
文件中的代码。 - 直接导入包名,并不会将包中所有模块全部导入到程序中,它的作用仅仅是导入并执行包下的
__init__.py
文件,因此,运行导入包的程序时,在执行__init__.py
文件中代码的同时,还会抛出AttributeError
异常(访问的对象不存在)。 - 包的本质就是模块,导入模块时,当前程序中会包含一个和模块名同名且类型为
module
的变量,导入包也是如此。
from 包名 import 模块名 [as 别名]
对以上格式说明,
- 用
[]
方括号括起来的部分,是可选部分,可有可无。 - 包被导入的同时,会在该包(被导入的包)的目录下生成一个
__pycache__
目录,目录中包含__init__.cpython-36.pyc
文件。 - 使用此语法格式导入包中模块后,在使用其成员时不需要带包名前缀,但需要带模块名前缀。
- 如果使用
as
给模块名起一个别名的话,就直接使用这个别名作为前缀使用该模块中的成员。 - 也支持
from 包名 import *
这种写法,它和import 包名
的作用一样,都只是将该包的__init__.py
文件导入并执行。
from 包名.模块名 import 成员名 [as 别名]
对以上格式说明
- 用
[]
方括号括起来的部分,是可选部分,可有可无。 - 包被导入的同时,会在该包(被导入的包)的目录下生成一个
__pycache__
目录,目录中包含__init__.cpython-36.pyc
文件。 - 此语法格式导入的成员(变量、函数、类),在使用时可以直接使用成员名(变量名、函数名、类名)调用。
- 如果使用
as
给成员名起一个别名的话,就直接使用这个别名调用成员。