《Python高性能编程》——1.3 为什么使用Python

1.3 为什么使用Python

Python具有高度的表现力且容易上手——新开发者会很快发现他们可以在很短时间里做到很多。许多Python库包含了用其他语言编写的工具,使Python可以轻易调用其他系统。比如,scikit-learn机器学习系统包含了LIBLINEAR和LIBSVM(两者皆以C语言写成),numpy库则包含了BLAS以及其他用C和Fortran语言写的库。因此,正确运用这些库的Python代码确实可以在速度上做到跟C媲美。

Python被誉为“内含电池”,因为它内建了很多重要且稳定的库。包括:

unicode和bytes

语言核心内建。

array

原始类型的高效数组。

math

基本数学操作,包括一些简单的统计数学。

sqlite3

包含了流行的基于文件的SQL引擎SQLite3。

collections

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

除了这些语言核心库,还有大量的外部库,包括:

numpy

一个Python数字库(矩阵运算的基石库)。

scipy

大量可信的科学库的集合,通常包含了广受尊重的C和Fortran库。

pandas

一个数据分析库,类似于R语言的数据框或Excel表格,基于scipy和numpy。

scikit-learn

正在快速成为默认的机器学习库,基于scipy。

biopython

一个生物信息学库,类似于bioperl。

tornado

一个提供了并发机制的库。

各类数据库封装

为了跟基本上所有的数据库通信,包括Redis、MongoDB、HDF5以及SQL。

各类网站开发框架

用于创建网站的各种高性能系统,如django、pyramid、flask和tornado。

OpenCV

计算机视觉的封装。

各类API封装

用于轻松访问各种时髦的web API如Google、Twitter和LinkedIn。

为了适应各种部署环境,还有大量可选的管理环境和shell,包括:

  • 标准发行版。
  • Enthought公司的EPD和Canopy,一个非常成熟且能干的环境。
  • Continuum公司的Anaconda,一个注重科学计算的环境。
  • Sage,一个类似于Matlab的环境,包括一个集成开发环境(IDE)。
  • Python(x,y)。
  • IPython,一个广泛被科学家和开发人员使用的Python互动shell。
  • IPython Notebook,一个基于浏览器的IPython前端,广泛用于教学和演示。
  • BPython,另一个Python互动shell。

Python的一大优势在于它可以快速实现出一个新主意的原型。由于存在各种支持库,它能够轻易测试出一个主意是否可行,哪怕第一个实现可能是磕磕碰碰做出来的。

如果你想要让你的数学函数更快,看看numpy。如果你想要实验一下机器学习,试试scikit-learn。如果你在清理和操作数据,那么pandas是一个好选择。

总的来说,我们有理由提出这样一个问题,“为了让我们的系统跑得更快而进行的优化从长期来看会不会反而导致我们团队整体跑得更慢了?”只要花费足够的人力,系统总是可以被榨出更多的性能,但这可能导致系统脆弱的可维护性以及难以理解的优化并最终导致整个团队绊倒在地。

Cython就是一个例子(7.6节),它将Python代码注释成类似C语言的类型,被转化后的代码可以被一个C编译器编译。它在速度上的提升令人惊叹(相对较少的努力就能获得C语言的速度),但后续代码的维护成本也会上升。尤其是,对这个新模块可能更难,因为团队成员需要具备一定的编程能力来理解那些为了性能提升而绕开Python虚拟机的折衷。

时间: 2024-08-30 00:58:32

《Python高性能编程》——1.3 为什么使用Python的相关文章

《Python高性能编程》——1.2 将基本的元素组装到一起

1.2 将基本的元素组装到一起 仅理解计算机的基本组成部分并不足以理解高性能编程的问题.所有这些组件的互动与合作还会引入新的复杂度.本段将研究一些样本问题,描述理想的解决方案以及Python如何实现它们. 警告:本段可能看上去让人绝望--大多数问题似乎都证明Python并不适合解决性能问题.这不是真的,原因有两点.首先,在所有这些"高性能计算要素"中,我们忽视了一个至关重要的要素:开发者.原生Python在性能上欠缺的功能会被迅速开发出来.另外,我们会在本书中介绍各种模块和原理来帮助减

《Python高性能编程》——第1章 理解高性能Python 1.1 基本的计算机系统

第1章 理解高性能Python 读完本章之后你将能够回答下列问题 计算机架构有哪些元素? 常见的计算机架构有哪些? 计算机架构在Python中的抽象表达是什么? 实现高性能Python代码的障碍在哪里? 性能问题有哪些种类? 计算机编程可以被认为是以特定的方式进行数据的移动和转换来得到某种结果.然而这些操作有时间上的开销.因此,高性能编程可以被认为是通过降低开销(比如撰写更高效的代码)或改变操作方式(比如寻找一种更合适的算法)来让这些操作的代价最小化. 数据的移动发生在实际的硬件上,我们可以通过

《 Python树莓派编程》——3.4 利用Python进行编程

3.4 利用Python进行编程 现在,你已经了解了数据类型.接下来,让我们看看如何在实际程序中使用它们.当你创建一个Python程序时,首先必须从编译器的环境中退出来,并且打开一个文本编辑器,如emacs或者树莓派的Leafpad.在创建完程序后,将其".py"的扩展名保存.之后,你便可以通过输入以下命令运行该程序: 在众多的编程语言中,Python的语法也十分与众不同.Python使用空格或者缩进来分开不同的代码块.C语言等其他语言用花括号区分不同的代码块,如if语句:Python

《 Python树莓派编程》——第3章 Python介绍 3.1 脚本语言与程序设计语言

第3章 Python介绍 你可能还记得我们在第1章中提到,制作树莓派的初衷是为了让每个人(尤其是孩子们)都拥有编程的环境.为了实现该目的,树莓派的创造者们想要推出一台价格相对便宜但性能十分强劲的计算机,每个人都可以将这台计算机连接至键盘.鼠标.显示器进行编程. 创造树莓派的另一个原因是希望简化编程.为此,Eben Upton和他的同伴决定将Python语言集成到树莓派的操作系统中.他们认为,Python是一种强大的编程语言,那些没有编程经验的人也可以轻松快速地学会. 在本章,我将对Python进

《Python高性能编程》——导读

前 言 Python很容易学.你之所以阅读本书可能是因为你的代码现在能够正确运行,而你希望它能跑得更快.你可以很轻松地修改代码,反复地实现你的想法,你对这一点很满意.但能够轻松实现和代码跑得够快之间的取舍却是一个世人皆知且令人惋惜的现象.而这个问题其实是可以解决的. 有些人想要让顺序执行的过程跑得更快.有些人需要利用多核架构.集群,或者图形处理单元的优势来解决他们的问题.有些人需要可伸缩系统在保证可靠性的前提下酌情或根据资金多少处理更多或更少的工作.有些人意识到他们的编程技巧,通常是来自其他语言

《Python高性能编程》——2.6 使用cProfile模块

2.6 使用cProfile模块 cProfile是一个标准库内建的分析工具.它钩入CPython的虚拟机来测量其每一个函数运行所花费的时间.这一技术会引入一个巨大的开销,但你会获得更多的信息.有时这些额外的信息会给你的代码带来令人惊讶的发现. cProfile是标准库内建的三个分析工具之一,另外两个是hotshot和profile.hotshot还处于实验阶段,profile则是原始的纯Python分析器.cProfile具有跟profile一样的接口,且是默认的分析工具.如果你对这些库的历史

《Python高性能编程》——第2章 通过性能分析找到瓶颈 2.1 高效地分析性能

第2章 通过性能分析找到瓶颈 读完本章之后你将能够回答下列问题 如何找到代码中速度和RAM的瓶颈? 如何分析CPU和内存使用情况? 我应该分析到什么深度? 如何分析一个长期运行的应用程序? 在CPython台面下发生了什么? 如何在调整性能的同时确保功能的正确? 性能分析帮助我们找到瓶颈,让我们在性能调优方面做到事半功倍.性能调优包括在速度上巨大的提升以及减少资源的占用,也就是说让你的代码能够跑得"足够快"以及"足够瘦".性能分析能够让你用最小的代价做出最实用的决定

《Python高性能编程》——2.9 用memory_profiler诊断内存的用量

2.9 用memory_profiler诊断内存的用量 和Rober Kern实现的line_profiler包测量CPU占用率类似,Fabian Pedregosa和Philippe Gervais实现的memory_profiler模块能够逐行测量内存占用率.了解代码的内存使用情况允许你问自己两个问题: 我们能不能重写这个函数让它使用更少的RAM来工作得更有效率? 我们能不能使用更多RAM缓存来节省CPU周期? memory_profiler的操作和line_profiler十分类似,但是运

《Python高性能编程》——2.8 用line_profiler进行逐行分析

2.8 用line_profiler进行逐行分析 根据Ian的观点,Robert Kern的line_profiler是调查Python的CPU密集型性能问题最强大的工具.它可以对函数进行逐行分析,你应该先用cProfile找到需要分析的函数,然后用line_profiler对函数进行分析. 当你修改你的代码时,值得打印出这个工具的输出以及代码的版本,这样你就拥有一个代码变化(无论有没有用)的记录,让你可以随时查阅.当你在进行逐行改变时,不要依赖你的记忆. 输入命令pip install lin