Hello World
需要将 Cython pyx 文件转换为 C 代码( cythonized )并在从 Python 中使用之前进行编译。一种常见的方法是创建一个扩展模块,然后在 Python 程序中导入。
码
在本例中,我们创建了三个文件:
hello.pyx
包含 Cython 代码。test.py
是一个使用 hello 扩展的 Python 脚本。setup.py
用于编译 Cython 代码。
hello.pyx
from libc.math cimport pow
cdef double square_and_add (double x):
"""Compute x^2 + x as double.
This is a cdef function that can be called from within
a Cython program, but not from Python.
"""
return pow(x, 2.0) + x
cpdef print_result (double x):
"""This is a cpdef function that can be called from Python."""
print("({} ^ 2) + {} = {}".format(x, x, square_and_add(x)))
test.py
# Import the extension module hello.
import hello
# Call the print_result method
hello.print_result(23.0)
setup.py
from distutils.core import Extension, setup
from Cython.Build import cythonize
# define an extension that will be cythonized and compiled
ext = Extension(name="hello", sources=["hello.pyx"])
setup(ext_modules=cythonize(ext))
编译
这可以通过使用 cython hello.pyx
将代码转换为 C 然后使用 gcc
进行编译来完成。更简单的方法是让 distutils 处理这个:
$ ls
hello.pyx setup.py test.py
$ python setup.py build_ext --inplace
$ ls
build hello.c hello.cpython-34m.so hello.pyx setup.py test.py
共享对象(.so)文件可以从 Python 导入和使用,所以现在我们可以运行 test.py
:
$ python test.py
(23.0 ^ 2) + 23.0 = 552.0