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 ,即可安装模块