七天学会Python编程 -- 第七章 模块

7.1 什么是模块?

在上面章节有提到,模块可以理解为把一组相关的函数放在一起,起个分类名字,然后通过这个分类名字加函数名字来使用这些函数,用这个方式理解比较容易懂。比如 pickle 模块,它提供了几个相关的函数,让使用者可以方便的保存对象到文件,以及从文件加载对象。

为什么要使用模块?

模块的目的是更好地重用代码,你既可以在自己的项目中重用自己开发的一些模块,也可以分享模块给其他人。

比如 pickle 模块,那个开发者开发出来后可以很方便地分享给其他人使用,它已经被吸收到 Python 标准库中了,也就是说只要安装了 Python 环境就可以直接用这个模块。其他很多模块没有被包含到 Python 标准库中,需要额外安装。

比如说你要开发一个系统,需要用到发邮件的功能,可以找个别人开发的模块来用,也可以自己开发一个发邮件的模块,在自己的多个系统中使用。

7.2 模块定义和使用方法

最简单的模块就是一个里面只包含函数的 .py 文件,只包含函数的意思是不包含主程序内容,主程序的概念在前面章节解释过,这里再说明一下。

如果一个程序是这样的:

1
2
3
4
5
def func1():
print("This is func1.")

def func2():
print("This is func2.")

假设程序文件名字是 test1.py,当你用 python test1.py 运行时不会运行里面的代码,因为里面只定义了几个函数,并没有主程序代码,所以这个 test1.py 只能作为一个模块给别的程序使用,例如下面这段代码:

1
print("This is the main program.")

假设这个程序文件名字是 test2.py,用 python test2.py 运行时就能显示内容,里面没有任何函数,代码都属于主程序代码。

看一下怎样在 test2.py 中使用 test1.py 这个模块,修改 test2.py 文件的代码为:

1
2
3
4
5
6
7
import test1

print("This is the main program.")

test1.func1()

test1.func2()

用 python test2.py 运行时就能显示 test1.py 中两个函数的输出。

模块还可以通过目录进一步细分为包,也就是对模块再分类,这里就不做详细介绍了,需要用到的时候可以上网查一下资料。

7.3 分享你的模块给别人

我们用到的 pickle 是使用了别人分享的模块,你也可以分享模块给别人。

例如刚才章节里的 test1.py 文件就是一个模块,你直接发给别人,别人就可以在他们代码里用。

从规范化角度看,模块定义需要清晰明确,比如你想写一个发消息的模块,叫 MyMessaging.py,里面有发邮件的方法叫 sendEmail,有发微信的方法叫 sendWechat,有发短信的方法叫 sendSms,我们可以这样写:

(这里只是演示目的,不真正发送消息,还是用打印的方式模拟发送消息)

1
2
3
4
5
6
7
8
def sendEmail(email, content):
print("Sending the email successfully")

def sendWechat(wechatAccount, content):
print("Sending the Wechat message successfully")

def sendSms(mobile, content):
print("Sending the sms successfully")

保存这个文件为 MyMessaging.py,分享给别人,在别人的程序里就可以这样使用了:

1
2
3
4
5
6
7
import MyMessaging

MyMessaging.sendEmail("xxx@xxx.com", "email from me")

MyMessaging.sendWechat("xxx", "wechat message from me")

MyMessaging.sendSms("130xxxxx", "sms from me")

现在网上有很多开源项目,如果有兴趣可以参与,或者自己发起一个开源项目,吸引其他人参加,这是为软件开发整个生态做贡献,是比较有意义的事情。

7.4 实践练习时间

过去章节我们学习了模块相关内容,下面通过实践练习来理解。

练习1:

编写一个模块,保存文件名为 MyCalculate.py,里面定义加 add、减 subtract、乘 multiply、除 divide 4个函数,这四个函数都有2个参数 variable1 和 variable2,然后把加减乘除计算结果返回。再写一个 test_MyCalculate.py 程序,调用 MyCalculate.py 这个模块中的那4个函数,并打印返回结果。