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