9. 模块与包
Pyhton 语言的强大得益于各种各样的扩展库,来自全球的开发者为 Python 贡献了大量的扩展库,这些扩展库极大地丰富了 Python 的功能,本章将会介绍如何开发出自己的扩展程序。
9.1. 模块
在实际的开发过程中,对于较大的项目来说,一般不会在一个源文件中编写整个项目的源代码,通常需要按照功能或者其他的一些设计上的考虑,对源代码进行拆分,拆分成多个 Python 文件,每一个 Python 文件就是一个模块。
9.1.1. 开发一个模块
如上, Python 中的模块就是 Python 程序。以一个简易计算器为例,新建一个 calculate.py
的 Python 文件,具体代码如下所示:
# 加法
def add(a, b):
return a+b
# 减法
def sub(a, b):
return a-b
# 乘法
def mul(a, b):
return a*b
# 除法
def div(a, b):
try:
return a/b
except ZeroDivisionError as e:
print(e)
# 取余
def mod(a, b):
try:
return a%b
except ZeroDivisionError as e:
print(e)
上述的 calculate.py
的 Python 文件就是一个 Python 模块,文件名就是它的模块名,其模块名为 calculate
。
9.1.2. 模块的导入
要想在另一个 Python 文件中使用定义好的 calculate
模块,需要使用 import
关键字导入模块, import
语句的语法主要有如下的两种:
import module_name [as alias]
from module_name import member_name [as alias]
其中,第一种方法是导入模块内的所有成员,第二种方法只是导入模块内的指定成员。
使用第一种方法导入模块时,在使用时需要添加模块名作为前缀,即:
module_name.member_name
。
新建一个新的 Python 文件,命名为 module_test.py
,其代码如下:
# 第一种导入方式,以加法为例
import calculate
c = calculate.add(2, 3)
print(c) # 5
# 第二种导入方式,以减法为例
from calculate import sub
d = sub(3, 2)
print(d) # 1
9.2. 包
对于一个需要实际应用的模块而言,往往会具有很多程序单元,包括变量、函数和类等,如果将整个模块的所有内容都定义在同一个 Python 源文件中,这个文件将会变得非常庞大,此时就引入了包的概念。包其实就是包含多个模块源文件的文件夹,与普通文件夹不一样的是,在包种必须包含一个 __init__.py
文件。
9.2.1. 定义包
定义包主要有两步:
- 创建一个文件夹,该文件夹的名字就是该包的包名
- 在该文件夹内添加一个
__init__.py
文件
还是以上述的简易计算器程序为例,与上面不同的是将上述的 calculate
模块中的 5 个成员函数分别建立一个模块,分别命名为: add
, sub
, mul
, div
, mod
。将这 5 个模块放入到一个名为 cal_package
的包中,并建立一个 __init__.py
的文件,如下图所示:
9.2.2. 导入包内成员
如果需要使用上述 5 个模块中的函数,则可以使用 import
语句导入包内的成员,具体语法与模块的导入一致,具体使用方法如下代码所示:
# 第一种导入方式,以加法为例
import cal_package.add as add
a = add.add(2, 3)
print(a) # 5
# 第二种导入方式
from cal_package.add import add
b = add(2, 3) # 5
print(b)
9.3. 本章小结
本章介绍了 Python 中的模块和包,模块既是使用 Python 进行模块化编程的重要方式,也是扩展 Python 功能的重要手段。大量第三方模块和库极大地扩展了 Python 的能力,形成了 Python 强大的生态圈。
本章需要掌握知识点:
- 模块的两种导入方式及其区别
- 区分包和模块的区别