新手友好的Cython教程
我会一些脚本语言,比如 Python、Ruby、Lua 和 PHP,但我对编译语言,比如 C/C++ 一无所知。我想试着用 Cython 加速一些 Python 代码。Cython 本质上是一个把 Python 代码转换成 C 代码的工具,目的是为 Python 创建 C 扩展。简单来说,你需要用一种更严格的 Python 版本来编写代码,然后它会编译成 C 代码,再变成机器能直接理解的代码。
问题是,我不懂 C,而 Cython 的文档是针对那些显然已经懂 C 的人写的(里面什么都没解释,只是直接展示),对我没有帮助。我想知道有没有适合 Python 程序员的 Cython 教程,或者我是否必须先学 C 才能学 Cython。
请记住,我是一个有能力的 Python 程序员,我更希望从我已经擅长的语言的角度来学习 Cython,而不是为了学 Cython 而去学一门全新的语言。
1) 请不要推荐 psyco
补充:任何能帮助我理解官方 Cython 文档的信息都是有用的。
7 个回答
你有没有看到这个链接:http://www.perrygeo.net/wordpress/?p=116,看起来是个不错的概述。你也可以看看pyzmq和gevent的源代码,它们的核心代码是用Cython写的。
本
cython
有两个主要的用途
- 与 C 语言库进行交互
- 加速 Python 代码
它可能因为第一个用途而更受到关注,所以你找到的教程大多都强调 C 相关的内容。不过,听起来你更想用它来加速代码。
根据我对 cython
的经验,你可以尝试编译你的 Python 程序,看看效果如何。这样可能会让程序稍微快一点(也许)。如果想让程序快很多,你需要选择性地把 Python 的数据类型转换成 C 的数据类型。这样就能真正发挥 cython
的威力。
如果你查看一下 官方教程,你需要关注他们使用 cdef
这个关键词的地方。
总结一下
- 尽量少改动地让你现有的 Python 程序可以用
cython
编译 - 把一些变量声明为
cdef
,然后再让程序运行一次 - 如果速度还是不够快,就回到第二步。
抱歉这不是一个具体的教程链接,但希望能给你指明一个方向!
学学C语言吧!(抱歉,实在忍不住。)
不过说正经的,似乎你主要需要了解一下C语言中的变量类型(也就是C类型),这样才能有效地使用cdef
。
如果你决定认真学习C语言,可以考虑买一本Kernighan和Ritchie的书,简称K & R,这本书在亚马逊上有卖。