7.1 什么是模块?
在上面章节有提到,模块可以理解为把一组相关的函数放在一起,起个分类名字,然后通过这个分类名字加函数名字来使用这些函数,用这个方式理解比较容易懂。比如 pickle 模块,它提供了几个相关的函数,让使用者可以方便的保存对象到文件,以及从文件加载对象。
为什么要使用模块?
模块的目的是更好地重用代码,你既可以在自己的项目中重用自己开发的一些模块,也可以分享模块给其他人。
比如 pickle 模块,那个开发者开发出来后可以很方便地分享给其他人使用,它已经被吸收到 Python 标准库中了,也就是说只要安装了 Python 环境就可以直接用这个模块。其他很多模块没有被包含到 Python 标准库中,需要额外安装。
比如说你要开发一个系统,需要用到发邮件的功能,可以找个别人开发的模块来用,也可以自己开发一个发邮件的模块,在自己的多个系统中使用。
7.2 模块定义和使用方法
最简单的模块就是一个里面只包含函数的 .py 文件,只包含函数的意思是不包含主程序内容,主程序的概念在前面章节解释过,这里再说明一下。
如果一个程序是这样的:
1 | def func1(): |
假设程序文件名字是 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 | import test1 |
用 python test2.py 运行时就能显示 test1.py 中两个函数的输出。
模块还可以通过目录进一步细分为包,也就是对模块再分类,这里就不做详细介绍了,需要用到的时候可以上网查一下资料。
7.3 分享你的模块给别人
我们用到的 pickle 是使用了别人分享的模块,你也可以分享模块给别人。
例如刚才章节里的 test1.py 文件就是一个模块,你直接发给别人,别人就可以在他们代码里用。
从规范化角度看,模块定义需要清晰明确,比如你想写一个发消息的模块,叫 MyMessaging.py,里面有发邮件的方法叫 sendEmail,有发微信的方法叫 sendWechat,有发短信的方法叫 sendSms,我们可以这样写:
(这里只是演示目的,不真正发送消息,还是用打印的方式模拟发送消息)
1 | def sendEmail(email, content): |
保存这个文件为 MyMessaging.py,分享给别人,在别人的程序里就可以这样使用了:
1 | import MyMessaging |
现在网上有很多开源项目,如果有兴趣可以参与,或者自己发起一个开源项目,吸引其他人参加,这是为软件开发整个生态做贡献,是比较有意义的事情。
7.4 实践练习时间
过去章节我们学习了模块相关内容,下面通过实践练习来理解。
练习1:
编写一个模块,保存文件名为 MyCalculate.py,里面定义加 add、减 subtract、乘 multiply、除 divide 4个函数,这四个函数都有2个参数 variable1 和 variable2,然后把加减乘除计算结果返回。再写一个 test_MyCalculate.py 程序,调用 MyCalculate.py 这个模块中的那4个函数,并打印返回结果。