它是一個用來快速產生 Python擴充模組(extention module)的工具
它的語法是python語言語法和c語言語法的混血
他比swig更容易寫python的擴充模組
也許你會說swig可以直接透過c的頭檔產生擴充模組,但是swig對回呼函數的支援不是很好,
另外,如果用swig,很多情況下,你要寫額外的程式碼將輸入的參數轉換成python物件以及將輸出轉成python對象,例如如果封裝的一個C函數的參數是輸入輸出的話,又如如果C函數的參數中有回呼函數的話
而在Cython,C裡的類型,如int,float,long,char*等都會在必要的時候自動轉成python對象,或是從python對象轉成C類型,在轉換失敗時會拋出異常,這正是Cython最神奇的地方
另外, Cython對回呼函數的支援也很好。
##cython 在linux
下[blueelwang@pythontab ~]$ wget https://pypi.python.org/packages/b7/67/7e2a817f9e9c773ee3995c1e15204f5d01c8da71882016cac10342ef031b/Cython-0.25.2.tar.gz [blueelwang@pythontab ~]$ tar xzvf Cython-0.25.2.tar.gz [blueelwang@pythontab ~]$ cd Cython-0.25.2 [blueelwang@pythontab ~]$ python setup.py install
[blueelwang@pythontab ~]$ sudo pip install Cython --install-option="--no-cython-compile"
[blueelwang@pythontab ~]$ sudo apt-get install cython
def say_hello_to(name): print("Hello %s!" % name)
from distutils.core import setup from distutils.extension import Extension from Cython.Distutils import build_ext ext_modules = [Extension("hello", ["hello.pyx"])] setup( name = 'Hello world app', cmdclass = {'build_ext': build_ext}, ext_modules = ext_modules )
[blueelwang@pythontab ~]$ python setup.py build_ext --inplace
Object
* 封裝好的檔案)4. 用python呼叫hello.so,呼叫檔案為test.pyimport hello hello.say_hello_to("hi,cython!!")
以上是分享Cython安裝與使用入門經驗的詳細內容。更多資訊請關注PHP中文網其他相關文章!