将Python程序转换为C/C++代码?
有没有办法把一个Python程序转换成C/C++呢?
我需要实现几个算法,但我不确定在C/C++中做这件事会不会让我遇到很多麻烦,尤其是因为我对这两种语言不太熟悉。我想过先写一个简单的算法,然后把它和转换后的版本进行性能对比。如果转换后的版本明显比Python的快,那我就没办法,只能去用C/C++了。
8 个回答
Shed Skin 是一个“(受限的)Python转C++编译器”。
根据文档的介绍:
Shed Skin 是一个实验性编译器,可以把纯粹的、但隐式静态类型的 Python(2.4-2.6)程序转换成优化过的 C++ 代码。它可以生成独立的程序或者可以被更大的 Python 程序导入和使用的扩展模块。
除了类型限制之外,程序不能随意使用 Python 的标准库(不过大约有 25 个常用模块,比如
random
和re
,目前是支持的)。另外,并不是所有的 Python 特性都被支持,比如嵌套函数和可变数量的参数。
对于一组75 个非平凡的程序(总共超过 25,000 行代码),测量显示它的运行速度比 CPython 快 2 到 200 倍。
如果C语言的版本需要少x小时,那我会把这段时间用来让算法运行得更久或者再运行一次。
这里用“投资”这个词不太合适。
先用Python写一个能用的版本。你会发现这个比用C语言写的版本完成得快得多。
用Python的性能分析工具来测量运行效果。找到任何问题并修复它们。根据需要更改数据结构和算法,确保这一切都做得妥妥的。你会发现这个过程比用C语言写第一个版本要快得多。
如果还是太慢,那就把设计得很好、构建得很仔细的Python代码手动翻译成C语言。
因为回头看事情的方式,从现有的Python代码(包括现有的单元测试和性能分析数据)做第二个版本,仍然会比从零开始写C代码要快。
这段话很重要。
汤普森的首次望远镜制造者法则
制作一个四英寸的镜子再制作一个六英寸的镜子,比直接制作一个六英寸的镜子要快。比尔·麦基南
王研究所
没错。你可以看看 Cython。它就是用来做这个的:把Python代码转换成C语言,这样可以让程序运行得更快。