python模块

一、模块是什么

在程序开发的过程中,代码会越来越多,放在一个文件中往往不容易维护。为了更方便的维护代码,把函数依据不同的功能分组,放到不同的文件里,这样每个文件的代码就相对较少,容易维护。这样每个文件即是一个模块,在很多编程语言中都使用这种方式。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 模块名

七、参考博文

廖雪峰python3 菜鸟教程python3
python init.py说明

Previous Post

数据结构

Next Post

IO编程

Related Posts