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模块:
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标准库一般会提供StringIO
和cStringIO
两个库,这两个库的接口和功能是一样的,但是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
注:参考上面博文,根据自己理解整理一份,有些是直接把作者简介拷贝过来的。