新手友好的Cython教程

20 投票
7 回答
8705 浏览
提问于 2025-04-15 15:08

我会一些脚本语言,比如 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 个回答

2

你有没有看到这个链接:http://www.perrygeo.net/wordpress/?p=116,看起来是个不错的概述。你也可以看看pyzmq和gevent的源代码,它们的核心代码是用Cython写的。

18

cython 有两个主要的用途

  1. 与 C 语言库进行交互
  2. 加速 Python 代码

它可能因为第一个用途而更受到关注,所以你找到的教程大多都强调 C 相关的内容。不过,听起来你更想用它来加速代码。

根据我对 cython 的经验,你可以尝试编译你的 Python 程序,看看效果如何。这样可能会让程序稍微快一点(也许)。如果想让程序快很多,你需要选择性地把 Python 的数据类型转换成 C 的数据类型。这样就能真正发挥 cython 的威力。

如果你查看一下 官方教程,你需要关注他们使用 cdef 这个关键词的地方。

总结一下

  1. 尽量少改动地让你现有的 Python 程序可以用 cython 编译
  2. 把一些变量声明为 cdef,然后再让程序运行一次
  3. 如果速度还是不够快,就回到第二步。

抱歉这不是一个具体的教程链接,但希望能给你指明一个方向!

8

学学C语言吧!(抱歉,实在忍不住。)

不过说正经的,似乎你主要需要了解一下C语言中的变量类型(也就是C类型),这样才能有效地使用cdef

如果你决定认真学习C语言,可以考虑买一本Kernighan和Ritchie的书,简称K & R,这本书在亚马逊上有卖。

撰写回答