这篇文章会提供一些优化代码的工具。会让代码变得更简洁,或者更迅速。

当然这些并不能代替算法设计,但是还是能让Python加速很多倍。

其实前面讲算法的文章,也有提到过。比如适用于双向队列的 deque,以及在合适的条件下运用 bisect 和 heapq 来提升算法的性能。

而且前面也提到过,Python提供了当今最高级也是最有效的排序算法(list.sort)。

另外还有一个功能多样又迅速的散列表(dict)。而且如果写迭代器封装、功能性代码或者是某种额外扩展的时候,或许CyToolz可以用得到。当然在itertools和 functools模块中,还有很多函数可以带来很高效的代码。

这篇文章主要讲优化单处理器的代码,下面会介绍一些一些高效的函数实现,也有已经封装好的拓展模块,还包括速度更快的Python解释器。

当然多处理器版本确实能大幅提高运行效率。如果想了解多核编程,可以从multiprocessing模块开始。而且也能找到非常多的关于分布式计算的第三方工具。这里可以看一下Python wiki上的关于Parallel Processing的内容。

接下来,会说一些关于Python加速工具的选单。

1

NumPy、SciPy、Sage和Pandas

先说NumPy,它的核心是一个多维数字数组的实现。除了这个数据结构之外,还实现了若干个函数和运算符,可以高效地进行数组运算。并且对于被调用的次数进行了精简。它可以被用来进行极其高效的数学运算。

SciPy和Sage都将NumPy内置为自身的一部分,同时内置了其他的不同的工具,从而可以用于特定科学、数学和高性能计算的模块。

Pandas是一个侧重于数据分析的工具。如果处理大量半结构化数据的时候,可能也会用到Pandas相关的工具,比如Blaze。

2

PyPy、Pyston、Parakeet

Psyco和Unladen Swallow

让代码运行的更快,侵入性最小的就是使用实时编译器(JIT编译)。以前的话我们可以直接安装Psyco。安装之后导入psyco,然后调用psyco.full()。代码运行速度就可以明显提升。运行Python代码的时候,它可以实时监控程序,会将一部分代码编译为了机器码。

现在好多Psyco等加速器的项目已经停止维护了,不过类似的功能在PyPy中得到了继承。

PyPy为了方便分析、优化和翻译,用Python语言将Python重新实现了一遍,这样就可以JIT编译。而且PyPy可以直接将代码翻译成像C那样的性能更高的语言。

Unladen Swallow是一个Python的JIT编译器。是Python解释器的一本版本,被称为底层虚拟机(LLVM)。不过这个开发已经停止了。

Pyston是一个与LLVM平台较为接近的Python的JIT编译器。很多时候已经优于Python的实现,但不过还有很多地方不完善。

3

GPULib、PyStream

PyCUDA和PyOpenCL

这四个都是用在图像处理单元来实现代码的加速。前面讲的都是用代码优化来实现加速的。而这些都是从硬件层面上进行加速,如果有一个强大的GPU,我们可以用GPU来计算,从而减少CPU宝贵的资源。

PyStream古老一点。GPULib提供了基于GPU的各种形式的数据计算。

如果用GPU加速自己的代码,可以用PyCUDA和PyOpenCL。

4

Pyrex、Cython

Numba和Shedskin

这四个项目都致力于将Python代码翻译为C、C++和LLVM的代码。Shedskin会将代码编译为C++语言。Pyrex、Cython编译的主要目标是C语言。Cython也是Pyrex的一个分支。

而且,Cython还有NumPy数组的额外支持。

如果面向数组和数学计算的时候,Numba是更好的选择导入时会自动生成相应的LLVM的代码。升级版本是NumbaPro,还提供了对GPU的支持。

5

SWIG、F2PY

Boost.Python

这些工具可以将其他的语言封装为Python的模块。第一个可以封装C/C++语言。F2PY可以封装Fortran。Boost.Python可以封装C++语言

SUIG只要启动一个命令行工具,往里面输入C或者C++的头文件,封装器代码就会自动生成。除了Python,而且可以成为其他语言的封装器,比如Java和PHP。

6

ctypes、llvm-py

和CorePy2

这些模块可以帮助我们实现Python底层对象的操作。ctypes模块可以用于在内存中构建编译C的对象。并且调用共享库中的C的函数。不过ctypes已经包含在Python的标准库里面了。

llvm-py主要提供LLVM的Python接口。以便于构建代码,然后编译他们。也可以在Python中构建它的编译器。当然搞出自己编程语言也是可以的。

CorePy2也可以进行加速,不过这个加速是运行在汇编层的。

7

Weave、Cinpy和PyInline

这三个包,就可以让我们在Python代码中直接使用C语言或者其他的高级语言。混合代码,依然可以保持整洁。可以使用Python代码的字符串的多行特性,可以使其他的代码按照自身的风格来进行排版。

8

其他工具

如果我们要节省内存,就不能使用JIT了。一般JIT都太耗费内存。有一句话说的很对,时间和内存经常不能兼得,而我们在工程开发中,总是要寻找他们的平衡点

至于其他的一些东西,比如Micro Python项目,这个是用在嵌入式设备或者微控制器上面使用的。

如果只是想在Python环境中工作,然后想用别的语言,可以看看这个项目Julia

- END -

本文为转载分享&推荐阅读,若侵权请联系后台删除

python多分支实现四则运算器代码_一份让Python疯狂加速的工具合集!相关推荐

  1. Python多分支实现四则运算器

    题目要求: 用多分支结构编写一个程序实现四则运算器(+,-,*,/). 当输出合法的时候,输出表达式及运算结果: 输入不合法时,输出Error. 输入输出示例: 代码如下: class calcula ...

  2. python获取表单数据的代码_使用flask和python从html表单获取表单数据

    我正在尝试在按下submit时从文本字段中获取表单数据,以便将其放入json格式并作为另一个页面访问json数据,该页面将是localhost:5000/info.每次我试图用request.form ...

  3. python中的猜数字实验代码_「gals」python实现推理猜数字游戏Begals - seo实验室

    gals Begals是可以和朋友一起玩的一个推理游戏.你的朋友想到一个随机的.没有重复的3位数字,你尝试去猜测它是什么. 每次猜测之后,朋友就会给出3种类型的线索: Bagels:你猜测的3个数都不 ...

  4. Python研发工程师必备工具合集

    Python研发工程师必备工具合集 1.必备工具 2.常用网站 3.学习路线 4.必备技能 5.书籍推荐 6.进阶学习 一.必备工具: 1.Sublime Text 2.Notepad++ 3.Vis ...

  5. Python 数据分析三剑客之 NumPy(五):数学 / 算术 / 统计 / 排序 / 条件 / 判断函数合集

    CSDN 课程推荐:<Python 数据分析与挖掘>,讲师刘顺祥,浙江工商大学统计学硕士,数据分析师,曾担任唯品会大数据部担任数据分析师一职,负责支付环节的数据分析业务.曾与联想.亨氏.网 ...

  6. Python渗透测试工具合集及书籍推荐(转)

    Python渗透测试工具合集 如果你热爱漏洞研究.逆向工程或者渗透测试,我强烈推荐你使用 Python 作为编程语言.它包含大量实用的库和工具,本文会列举其中部分精华. 本文转自: http://ww ...

  7. Python安全测试工具合集

    Python安全测试工具合集 转自:http://netsecurity.51cto.com/art/201311/417021.htm ------------------------------- ...

  8. 语言图片渐入代码_这个可能打败Python的编程语言,正在征服科学界

    图片来源:Unsplash Julia 语言是近年来科学世界中出现的一匹黑马.物理学家 Lee Phillips 发表了一篇科普文章,介绍了这种科学计算语言的真正魅力所在. 本文转载自公众号" ...

  9. 关于python的分支结构、以下选项_关于 Python 的分支结构,以下选项中描述错误的是...

    [单选题]continue语句只结束本次循环. [单选题]__________ sind Sie? Ich bin Studentin. [多选题]光伏电站岗位有哪些? [单选题]理想气体向真空膨胀, ...

最新文章

  1. 6、JUC--同步锁Lock
  2. SAP收购sysbase
  3. Cannot open the disk 'E:/vmware/Ubuntu.vmdk' or one of the snapshot disks it depends on. 解决方法
  4. 中科大计算机专业少实习_为什么很少有计算机科学专业的人?
  5. oracle中出现会话被锁
  6. python怎么导入apscheduler,如何强制apscheduler将作业添加到作业存储?
  7. 用反射方法使用户控件动态调用父页面的方法
  8. 哈尔滨现大雾天气 高速封闭航班推迟起飞
  9. 神经网络的输出层有哪些_深度学习的数学-神经网络、输入层、隐藏层、输出层...
  10. 提高软件质量的10点
  11. 利用JDK1.5的工具对远程的Java应用程序进行监测(摘录)
  12. mysql 1415 function_mysql error 1415:not allowed to return a result set from a function
  13. 单平台软件开发多系统APP
  14. ORBSLAM2学习(二):ORB源码分析
  15. 工业相机选型、高速摄像机选型、相机参数接口总结
  16. autojs读取文字_Auto.js 获取识别图片文本
  17. “Uncaught TypeError: $(...).dataTable is not a function”
  18. 磁导航组成与基本原理
  19. Python数据存取详解
  20. systemverilog 中的always_comb, always_latch, always_ff

热门文章

  1. C#中DictionaryTKey,TValue排序方式
  2. 反射中使用 BindingFlags.IgnoreCase
  3. python机器学习库xgboost——xgboost算法(有分类和回归实例)
  4. PHP操作redis
  5. ELK学习8_ELK数据流传输过程_问题总结1
  6. PHP-FPM.CONF配置:日志文件、端口设置、动态静态选择设置
  7. PHP的函数file_get_contents() 把整个文件读入一个字符串中
  8. html switch开关实现隐藏,css3实现switch开关效果
  9. Curl http_code 状态码
  10. Web如何应对流量劫持?