在Python中,同样具有模块和包来管理代码
模块:每一个python文件就是一个模块,例如index.py
这就是一个模块;
包:在文件系统中,一个文件夹就是一个包,在python中,一个文件夹中需要有__init__.py
文件,每个文件夹中必须要有这个文件,这样python才可以把这个文件夹当成一个包来处理;
1.导入python的内建模块math
import math
print math.sqrt(4) # 执行math模块中sqrt开平方函数结果输出:2
倘若只想用到math模块中的几个函数,那我们不必把整个math模块都导入进来:
from math import pow, sin, log, sqrt
print sqrt(4) # 这样我们可以直接用sqrt()函数
如果这样的话会出现一个问题:如果两个模块中都存在相同名字的函数(方法),引入到同一个文件中就会产生冲突。
这种情况下我们可以不用from...import...
方法引入,我们将用上面的第一种引用方法引入:
import math, logging
print math.log(10)
print logging.log(10)
当然如果非要用from...import...
方法的话也是有解决办法的,
我们可以给冲突的函数名称用as
变更一下:
from math import log
from logging import log as logger # 现在loggin里的log函数名在本文件中变成了logger
print log(10) # 调用的是math模块中的log函数
print logger(10) # 调用的是logging模块中的log函数
2.动态导入模块
如果要导入的模块不存在,python将会报错,这样我们的代码就不能执行下去了,为了解决这个问题,我们需要动态的导入模块;
有的时候两个不同的模块提供了相同的功能,这样我们可以利用捕捉错误语句来动态的导入模块:
python 2.6/2.7提供了json模块,但python 2.5以下版本没有json模块,不过可以安装一个simplejson模块,这两个模块提供的函数名和功能都一模一样。
下面动态导入json模块:如果json模块在当前python版本中存在,那么将其引进来,如果不存在,将会报错,try
将捕获错误,并在捕获到指定错误时执行except
语句。这样就会将simplejson命名为json引进来。
try:
import json
except ImportError:
import simplejson as json
print json.dumps({'python':2.7})
3.__future__
的使用
__future__
是个模块,当python新版本的一个特性与旧版本不兼容时,该特性将会在旧版本中添加到__future__
中,以便旧的代码能在旧版本中测试新特性。
例如:
①在python 3.x中,字符串统一为unicode,不需要加前缀u,而以字节储存的str则必须加前缀b,利用__future__
的unicode_literals在python 2.7中编写unicode字符串。
from __future__ import unicode_literals
s = 'hello word'
print isinstance(s, unicode)
②在python 2.7中整数除法结果仍是整数,但是python 3.x已经改进了整数的除法算法,用’/’除得到浮点数,用’//’除得到整数,利用__future__
中的division可以在python 2.7中引入3.x的除法法则:
2.7中:
pirnt 10/3 # 3
3.x中:
print 10/3 # 3.3333333335
print 10//3 # 3
在2.7中使用3.x的除法法则:
from __future__ import division
print 10/3 # 3.3333333333335
最后提一点注意 from __future__ import ???
语句要写在代码的开头,因为不写在开头会报错,python不知道要用哪个版本的规则去解释代码;
3.python安装第三方模块
python提供的模块管理工具:
①easy_install
②pip(推荐,已经内置到python 2.7.9版本中)
如果你的python版本比2.7.9高,那么你可以直接在终端使用pip:
在终端输入
pip install web.py # 这样我们就安装了web这个模块
然后就可以在文件中引入web模块:
import web
贴出查找第三方模块的名字的网站:
http://pypi.python.org