一、Cython是什么?
它是一個用來快速生成Python擴展模塊(extentionmodule)的工具
它的語法是python語言語法和c語言語法的混血
他比swig更容易編寫python的擴展模塊
也許你會說swig可以直接通過c的頭文件生成擴展模塊,但是swig對回調(diào)函數(shù)的支持不是很好,
另外,如果用swig,很多情況下,你要寫額外的代碼將輸入的參數(shù)轉(zhuǎn)換成python對象以及將輸出轉(zhuǎn)成python對象,例如如果封裝的一個C函數(shù)的參數(shù)是輸入輸出的話,又如如果C函數(shù)的參數(shù)中有回調(diào)函數(shù)的話
而在Cython,C里的類型,如int,float,long,char*等都會在必要的時候自動轉(zhuǎn)成python對象,或者從python對象轉(zhuǎn)成C類型,在轉(zhuǎn)換失敗時會拋出異常,這正是Cython最神奇的地方
另外,Cython對回調(diào)函數(shù)的支持也很好。
總之,如果你有寫python擴展模塊的需求,那么Cython真的是一個很好的工具
二、安轉(zhuǎn)cython
cython在linux下安裝:
1.源碼包安裝:
[blueelwang@pythontab~]$wgethttps://pypi.python.org/packages/b7/67/7e2a817f9e9c773ee3995c1e15204f5d01c8da71882016cac10342ef031b/Cython-0.25.2.tar.gz
[blueelwang@pythontab~]$tarxzvfCython-0.25.2.tar.gz
[blueelwang@pythontab~]$cdCython-0.25.2
[blueelwang@pythontab~]$pythonsetup.pyinstall
2.pip包安裝
[blueelwang@pythontab~]$sudopipinstallCython--install-option="--no-cython-compile"
3.Ubuntu下安裝
[blueelwang@pythontab~]$sudoapt-getinstallcython
安裝后輸入cython即可驗證是否安裝成功
三、使用
1、編寫以.pyx為擴展名的cython程序,hello.pyx
defsay_hello_to(name):
print("Hello%s!"%name)
2、編寫python程序setup.py
其目的是把hello.pyx程序轉(zhuǎn)化成hello.c,并編譯成so文件
fromdistutils.coreimportsetup
fromdistutils.extensionimportExtension
fromCython.Distutilsimportbuild_ext
ext_modules=[Extension("hello",["hello.pyx"])]
setup(
name='Helloworldapp',
cmdclass={'build_ext':build_ext},
ext_modules=ext_modules
)
3.執(zhí)行python程序
[blueelwang@pythontab~]$pythonsetup.pybuild_ext--inplace
執(zhí)行的結(jié)果會生成兩個文件:hello.c和hello.so(用PyObject*封裝好的文件)
4.用python調(diào)用hello.so,調(diào)用文件為test.py
importhello
hello.say_hello_to("hi,cython!!")
cython的主要目的是:簡化python調(diào)用c語言程序的繁瑣封裝過程,提高python代碼執(zhí)行速度(C語言的執(zhí)行速度比python快)
以上內(nèi)容為大家介紹了python之Cython安裝與使用入門,希望對大家有所幫助,如果想要了解更多Python相關(guān)知識,請關(guān)注IT培訓(xùn)機構(gòu):千鋒教育。http://m.2667701.com/