简介
我们已经介绍了函数,知道函数是对功能的封装。那么模块(module)就可以理解成是对函数的封装。模块将代码分成一些有组织的代码段,并保证它们之间的联系。通过模块能够实现代码重用。
导入模块
将其他模块中的属性加载到当前文件中的操作叫做导入,有四种导入的语句。
import语句:
import
语句导入格式如下:
1 2 |
import module1 import module2 |
from-import语句:
还可以使用from-import
语句从某个模块导入指定的属性,格式如下:
1 |
from module import name1, name2 |
扩展import语句(as):
有时候导入的模块属性名字太长或者不喜欢,我们可以为导入的模块属性使用别名,比如:
1 2 |
import tensorflow as tf from cgi import FieldStorage as form |
使用as
关键字,将模块属性重新命名。
from module import *语句:
该语句的意思是从模块module
中导入所有的属性,这种写法本身并不是很好的编程风格,它有可能覆盖当前名称空间现有的名字。建议在两种情况下使用这种方式:一种是目标模块中的属性太多,反复键入模块名很不方便;另一种就是在交互模式下,因为可以减少输入次数。
模块分类
Python标准模块本身提供的功能并不多,这门语言强大的地方就在于有大量的第三方模块可调用,用来实现各种功能。一般来说,模块按照来源不同可以分为三种类型:
- 标准库模块
- 第三方模块
- 自定义模块
标准模块
打开Python安装目录,可以看到一个Lib
文件夹,里面放着的就是模块文件,如图所示:
通过导入模块的语句导入相关的模块,比如:
1 2 3 4 |
import time print('hello') time.sleep(3) print('finthon.com') |
在这里导入time
模块,执行该程序首先输出hello
,休息三秒后,再输出finthon.com
。
第三方模块
第三方模块,是指别人已经开发好的模块,可以通过下载安装对方的模块,减少编程工作量。第三方模块在Lib
文件夹的site-packages
文件夹下,通过pip
或者conda
下载的第三方模块就保存在这个地方。
自定义模块
自定义模块是指我们自己编写的模块。在编写好对应的程序后,如果里面有几个函数常常用到,那么我们可以将它们整理成一个模块。在以后需要使用这项功能的时候,只需要导入该模块即可。举个简单的例子,新建一个python文件,暂命名为ccc.py
,在这个文件中输入:
1 |
print('hello, I am finthon!') |
然后我们将这个文件保存在Lib
文件夹下或者site-packages
文件夹下,此时该文件就成了一个模块,模块名就是文件名ccc
,可以直接通过导入该模块:
1 2 |
>>>import ccc hello, I am finthon! |
当然这只是一个简单的例子,导入模块的时候就会自动输出我们设定的内容。
自定义阶乘模块
接下来我们以一个实现阶乘的模块为例,做成“包”的形式储存模块并调用。首先在site-packages
文件夹下创建一个属于自己的文件夹,暂时命名为finthon
,然后进入我们创建的文件夹,在该文件夹下新建一个名为__pycache__
的文件夹,该文件夹名字固定,主要实现缓存相关的功能,然后新建一个__init__.py
文件,名字也固定,主要执行一些初始化程序。现在目录结构如图:
于是,我们就可以开始在该目录下新建一个负责计算阶乘的脚本文件了,命名为docal.py
,我们要实现的功能如下:
- 输入负数,没有阶乘;
- 输入0,阶乘为1;
- 输入正数,返回阶乘值。
在docal.py
中写入如下代码:
1 2 3 4 5 6 7 8 9 10 |
def cal(x): if x < 0: print('负数没有阶乘值') elif x == 0: return 1 else: value = 1 for i in range(1, x + 1): value *= i return value |
可以看出,我们定义了一个cal()
函数实现阶乘。最终文件及目录如下所示:
然后,我们输入如下代码验证我们写好的自定义模块:
1 2 3 4 5 6 7 8 9 |
>>>import finthon.docal as fd >>>fd.cal(-2) 负数没有阶乘值 >>>fd.cal(0) 1 >>>fd.cal(10) 3628800 |
我们成功实现了阶乘的计算。在这个过程中,我们首先导入了finthon
下的docal
模块,并将它重新命名为fd
,然后调用fd
模块中的cal()
函数计算输入数字的阶乘值。
总结
在本文中,首先我们详细介绍了如何导入模块;然后介绍了Python中的三种模块类型;最后通过一个阶乘的例子详细地讲解了如何创建自定义的模块。随着以后的深入学习,我们完全可以将自己编写的好模块分享出去,让别人也受益匪浅。