1.模块的作用

模块的作用就是为了便于管理维护编写的代码,把不同的一些功能分为不同的模块来实现功能,需要时就引入这个模块。

2.模块的引入

1)模块的介绍

在Python中,一个.py文件就称之为一个模块(Module),如下图所示,module_ex1.py就是一个模块,模块还有一个功能就是可以避免函数名和变量名冲突。为了避免模块名相同,这是就引入了包(Package):按目录来组织模块的方法,如图所示package_ex就是一个包,每一个包目录下面都会有一个__init__.py的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包。引入包后,模块名就要加上包名,如module_ex1.py模块名就是package_ex.module_ex1.py。

2)模块的引入

模块的引入需要使用关键字import来引入某个模块,比如要引用内部模块math,在编码开头用import math来引入。在调用math模块中的函数或变量时,需要加上模块名,如调用sqrt()函数:math.sqrt(1)。如果只需要调用某个模块的某个函数,就可以在开头使用这种格式引入:from 模块名 import 函数名1,函数名2....。

如上图所示目录结构模块引入举例:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

'a test module'

__author__="olive"

def add(a,b):
    print('hello world')
    s=a+b
    print(s)
    return(s)
module_ex1

下面举例引用module_ex1模块:

import package_ex.module_ex1 as A   #使用别名代替比较长的模块名
A.add(1,2)

#运行结果
hello world
3
第一种方法引入
from package_ex.module_ex1 import add

add(1,3)

#运行结果
hello world
4
第二种方法引入
from package_ex.module_ex1 import *  #引入模块所有的函数
add(1,3)

#运行结果
hello world
4
第三种方法引入

 

3.模块的别名和作用域

1)别名

使用关键字as来定义别名,格式如:import 原模块名 as 别名

别名的使用,可以使本来一个繁琐的模块名变得简单,还有一个用处可以在导入模块时根据当前环境选择最合适的模块,如Python标准库一般会提供StringIOcStringIO两个库,这两个库的接口和功能是一样的,但是cStringIO是C写的,速度更快,所以,你会经常看到这样的写法:

try:
    import cStringIO as StringIO
except ImportError:    # 导入失败会捕获到ImportError
    import StringIO

这样就可以优先选择c环境的,如果不提供这个环境的,就会自动选择其他环境的,后面编程引入StringIO就行了。

2)作用域

作用域就是设定一些权限,有些函数和有些变量我们不想给别人使用,就可以加个权限,如:非公开的(private)

在Python中,是通过_前缀来实现的。

正常的函数和变量名是公开的(public),可以被直接引用,比如:abc、olive等;

类似__xxx__这样的变量是特殊变量,可以被直接引用,但是有特殊用途,比如__author____name__就是特殊变量,我们自己的变量一般不要用这种变量名;

类似_xxx__xxx这样的函数或变量就是非公开的(private),不应该被直接引用,比如_abc__abc等;

之所以我们说,private函数和变量“不应该”被直接引用,而不是“不能”被直接引用,是因为Python并没有一种方法可以完全限制访问private函数或变量,但是,从编程习惯上不应该引用private函数或变量。

 

参考博文:http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/0013868200196665403ac40fac14536939dd5af20810782000

注:参考上面博文,根据自己理解整理一份,有些是直接把作者简介拷贝过来的。