python进阶——三、模块和包

3-1 概念

将所有代码放入一个py文件,无法维护,就跟咱写笔记,要分几篇一样。方便修改,查阅。
引用其他模块

#test.py
import p1.math  #引用p1包的math模块
print math.pow(2,10)

模块名重复,则放入不同的包中。p1.utl与p2.utl,包就是文件夹,模块就是.py文件
区分包和普通目录。
包下面必须要有个init.py,每层都要有,即使是个空文件,只有存在,python才能将这个文件夹识别为包。

3-2导入模块

如果使用 from…import 导入 log 函数,势必引起冲突。这时,可以给函数起个“别名”来避免冲突:

from math import log
from logging import log as logger   # logging的log现在变成了logger
print log(10)   # 调用的是math的log
logger(10, 'import from logging')   # 调用的是logging的log

3-3动态导入模块

有的时候,两个不同的模块提供了相同的功能,比如 StringIO 和 cStringIO 都提供了StringIO这个功能。

这是因为Python是动态语言,解释执行,因此Python代码运行速度慢。

如果要提高Python代码的运行速度,最简单的方法是把某些关键函数用 C 语言重写,这样就能大大提高执行速度。

同样的功能,StringIO 是纯Python代码编写的,而 cStringIO 部分函数是 C 写的,因此 cStringIO 运行速度更快。

try:
    from cStringIO import StringIO
except ImportError:
    from StringIO import StringIO

上述代码先尝试从cStringIO导入,如果失败了(比如cStringIO没有被安装),再尝试从StringIO导入。这样,如果cStringIO模块存在,则我们将获得更快的运行速度,如果cStringIO不存在,则顶多代码运行速度会变慢,但不会影响代码的正常执行。

try 的作用是捕获错误,并在捕获到指定错误时执行 except 语句。

3-4 future

2.7 中10 / 3 =3
3中则是10 / 3=3.3333333333333335
10 // 3=3
要在Python 2.7中引入3.x的除法规则,导入future的division:


>>> from __future__ import division
>>> print 10 / 3
3.3333333333333335

任务:在Python 3.x中,字符串统一为unicode,不需要加前缀 u,而以字节存储的str则必须加前缀 b。请利用future的unicode_literals在Python 2.7中编写unicode字符串。

from __future__ import unicode_literals

s = 'am I an unicode?'
print isinstance(s, unicode)

3-5 安装第三方模块

-easy_install
-pip (推荐.2.7自带)
在cmd中,直接输入 pip install module_name.py ,即可安装模块

你可能感兴趣的:(python进阶)