一、模块是什么
在程序开发的过程中,代码会越来越多,放在一个文件中往往不容易维护。为了更方便的维护代码,把函数依据不同的功能分组,放到不同的文件里,这样每个文件的代码就相对较少,容易维护。这样每个文件即是一个模块,在很多编程语言中都使用这种方式。python中一个.py文件即是一个模块(Module)[引自廖雪峰的python3课程,内容略有更改]
二、模块化的好处
提升代码的可维护性
提升代码的复用性
在写程序过程中,一段代码往往可以在多处使用,把这段代码封装成一个模块,那么后续这段代码就不用在重写,在使用的时候直接调用模块即可。
避免函数名和变量名的冲突
在同一个文件中,函数和变量名不能有相同的,但是在不同的模块中变量名和函数名是可以相同的。
三、模块的管理方式
python使用目录来组织模块,这种方式成为包(package)。
假如目前有程序代码abc.py和xyz.py,那么创建一个目录mymodulee,然后把abc.py和xyz.py放到mymodule下面。在mymodule目录下需要有一个特殊的文件__init__.py,这个文件是必须存在,如果没有这个文件,则python会把此目录当做一个普通的目录。我们在导入一个包是,实际是导入了__init__.py。
1. 包的目录结构图
mymodule
├─ web
│ ├─ __init__.py
│ ├─ utils.py
│ └─ www.py
├─ __init__.py
├─ abc.py
└─ xyz.py
2. init.py的用法
__init__.py可以是空文件
也可以在__init__.py文件中,导入模块,这样在其他程序调用的时候,可以批量导入模块。
# package
# __init__.py
import re
import urllib
import sys
import os
__all__变量,导入所有模块
# __init__.py
__all__ = ['os', 'sys', 're', 'urllib']
四、模块的使用
1. import语句
import 模块名 即可导入模块
格式:
import module1[, module2[,... moduleN]
示例程序:
#!/usr/bin/env python3
import sys
def test():
args = sys.argv
if len(args)==1:
print("hello,world!")
elif len(args)==2:
print("hello,%s!"%(args[1]))
else:
print("Too many arguments!")
if __name__=="__main__":
test()
这个程序通过import导入python自带的sys模块,使用了里面的argv方法。
argv方式是获取程序命令行的参数。
2. import….as….语句
在导入模块的时候,可以给模块重新命名。
格式:
import modulename as newname
示例程序:
#!/usr/bin/env python3
import sys as newsys
def test():
args = newsys.argv
if len(args)==1:
print("hello,world!")
elif len(args)==2:
print("hello,%s!"%(args[1]))
else:
print("Too many arguments!")
if __name__=="__main__":
test()
3. from…import * 语句
有时候我们并不想把模块下所有的功能都引入进来,只想引入某些功能,这个时候就可以使用from…import这个语句。
格式:
from modname import name1[, name2[, ... nameN]]
示例程序:
#!/usr/bin/env python3
from sys import argv
def test():
args = argv
if len(args)==1:
print("hello,world!")
elif len(args)==2:
print("hello,%s!"%(args[1]))
else:
print("Too many arguments!")
if __name__=="__main__":
test()
这次使用from....import 语句只引入了sys模块的argv功能,所以在调用的时候,也不需要sys.argv,而是直接使用argv。
4. __name__属性
python中程序有两种使用方式,一种是单独运行,另外一种是通过作为模块被其它程序调用。作为模块被调用时,第一次引入的时候,其主程序会运行。但是有时候,我们只希望主程序在单独执行的时候运行,这个时候可以使用__name__属性。
在上面的程序中,有下面的一段代码,其中__name__是特殊变量,”main“表示主程序的意思,即如果__name__等于”main“,表示程序是单独运行的。下面程序的意思,表示如果程序是单独运行的,则执行下面的test()函数,否则不执行。
if __name__=="__main__": test()
五、自带模块
python有大量的自带模块,这些模块只要安装完python即可使用。
如:sys、os、datetime等等
六、第三方模块
第三方模块即非python自带的模块。第三方模块需要安装才可以使用。第三方模块主要是通过pip管理。
第三方模块的安装有pip和源码安装两种方式。
源码安装
下载源码包
python setup.py install
pip安装
pip install 模块名