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