模块和包的概念
调用模块时,由于同名模块的完整模块名不同(p1.util和p2.util),所以此时同名的模块不产生冲突。
导入模块
Python使用import语句导入一个模块。例如,导入系统自带的模块math。可以认为math就是一个指向已导入模块的变量,通过该变量,可以访问math模块中所定义的所有公开的函数、变量和类。
1 | import math |
如果只希望导入用到的math模块的某几个函数,而不是所有函数,可以用下面的语句。这样,可以直接引用pow, sin, log这3个函数,但math的其他函数没有导入进来,
1 | from math import pow, sin, log |
如果遇到名字冲突,比如math模块有一个log函数,logging模块也有一个log函数:如果使用import导入模块名,由于必须通过模块名引用函数名,因此不存在冲突;如果使用from…import导入log 函数,势必引起冲突。这时,可以给函数起个“别名”来避免冲突。
1 | import math, logging |
动态导入模块
如果导入的模块不存在,Python解释器会报ImportError错误,
1 | import something |
Python中存在不同模块提供相同的功能,比如io和cStringIO都提供了StringIO这个功能。这是因为Python是动态语言,解释执行,因此Python代码运行速度慢。如果要提高Python代码的运行速度,最简单的方法是把某些关键函数用C语言重写,这样就能大大提高执行速度。同样的功能,io是纯Python代码编写的,而cStringIO部分函数是C写的,因此cStringIO运行速度更快。
利用异常捕捉ImportError错误,可以在Python中动态导入模块,
1 | try: |
上述代码先尝试从cStringIO导入,如果失败了(比如cStringIO没有被安装),再尝试从io导入。这样,如果cStringIO模块存在,则将获得更快的运行速度,如果cStringIO不存在,则顶多代码运行速度会变慢,但不会影响代码的正常执行。
try的作用是捕获错误,并在捕获到指定错误时执行except语句。
__fulture__
Python的新版本会引入新的功能,但是,实际上这些功能可能在上一个版本中就已经存在了。要在旧版本“试用”某一新的特性,可以通过导入__future__模块的某些功能来实现。
1 | # Python 2.7的整数除法运算结果仍是整数 |
当新版本的一个特性与旧版本不兼容时,该特性将会在旧版本中添加到__future__中,以便旧的代码能在旧版本中测试新特性。
第三方库的安装
常用的pip命令
pip install <第三方库名> 安装指定的第三方库
pip install -U <第三方库名> 使用-U标签更新已安装的指定第三方库
pip uninstall <第三方库名> 卸载指定的第三方库
pip show <第三方库名> 列出某个指定第三方库的详细信息
pip search <关键词> 根据关键词在名称和介绍中搜索第三方库
注:某些第三方库提供下载的不是可执行文件,而是源文件。这时需要下载后需要在本地环境编译后安装,而由于本地环境的问题,常常发生安装失败,这时可以使用文件安装方法。