Python高性能编程(第2版)
上QQ阅读APP看书,第一时间看更新

1.3 为何使用Python

Python的表达能力极强,还易于学习,新手很快就会发现,他们能够在很短的时间内完成很多任务。很多Python库都封装了使用其他语言编写的工具,让你能够轻松地调用其他系统。例如,机器学习系统scikit-learn包含LIBLINEAR和LIBSVM(它们都是使用C语言编写的),而numpy包含BLAS以及其他C和Fortran语言库。因此,如果Python代码能正确地利用这些模块,其速度将可与C代码媲美。

Python被认为是“开箱即用”的,因为它内置了很多重要的工具和稳定的库。

unicode和bytes:身处Python语言的核心。

array:基本类型数组,内存使用效率高。

math:基本数学运算,包括一些简单的统计计算。

sqlite3:封装了基于文件的流行SQL引擎SQLite3。

collections:各种对象,包括双向队列、计数器和字典的变种。

asyncio:使用async和await语法为I/O密集型任务提供并发支持。

除上述语言核心库外,还有大量的外部库。

numpy:一个Python数值运算库,是各种矩阵运算的基石。

scipy:包含众多值得信赖的科学库,这些科学库通常封装了备受尊崇的C和Fortran语言库。

pandas:一个数据分析库,建立在scipy和numpy的基础之上,类似于R数据框架(data frame)和Excel电子表格。

scikit-learn:正快速成为默认的机器学习库,建立在scipy的基础之上。

tornado:让你能够轻松地实现并发的库。

PyTorch和TensorFlow:分别来自Facebook和Google的深度学习框架,提供了强大的Python和GPU支持。

NLTK、SpaCy和Gensim:提供了强大Python支持的自然语言处理库。

数据库绑定(database binding):用于同各种数据库通信,包括Redis、MongoDB、HDF5和SQL。

Web开发框架:用于创建网站的高性能系统,如aiohttp、django、pyramid、flask和tornado。

OpenCV:提供计算机视觉的绑定。

API绑定:让你能够轻松地使用流行的Web API,如Google、Twitter和LinkedIn。

还有大量受控环境和shell,可满足各种部署需求。

标准发行版。

pipenv、pyenv和virtualenv:用于搭建简单、可移植的轻量级Python环境。

Docker:用于搭建可重现的简单开发和生产环境。

Anaconda:专注于科学计算的环境。

Sage:一个类似于Matlab的环境,但包含集成开发环境(Integrated Development Environment,IDE)。

IPython:一个被科学家和开发人员广泛使用的交互式Python shell。

Jupyter Notebook:一个基于浏览器的IPython扩展,被广泛用于教学和演示。

Python的主要优点之一是,让你能够快速建立想法的原型。因为有众多的支持库,所以很容易检查想法是否可行,即便你的实现相当粗糙。

要提高数学函数的速度,可考虑使用numpy;要尝试机器学习,可考虑使用scikit-learn;而要清理和操作数据,pandas是不错的选择。

那么问题来了:长期看,为让系统运行得更快,会不会导致团队的开发速度降低呢?只要投入足够的精力,总是可以进一步提高系统的性能,但这可能导致所做的优化脆弱而难以理解,最终给团队带来障碍。

一个这样的例子是使用Cython(请参见7.6节)。Cython是一种基于编译器的方法,它通过添加C类型声明来修改Python代码,以便能够使用C语言编译器进行编译。这虽然可极大地提高速度(通常只需做少量工作就可让速度与C语言代码媲美),但为支持这些代码而付出的代价将增加。具体地说,支持新模块的工作可能更难,因为为绕开Python虚拟机以提升性能,可能需要做些折中,而要搞明白这些折中,团队成员必须有更高的编程技能。