一、Cython是什么?
它是一個(gè)用來(lái)快速生成Python擴(kuò)展模塊(extentionmodule)的工具
它的語(yǔ)法是python語(yǔ)言語(yǔ)法和c語(yǔ)言語(yǔ)法的混血
他比swig更容易編寫python的擴(kuò)展模塊
也許你會(huì)說(shuō)swig可以直接通過(guò)c的頭文件生成擴(kuò)展模塊,但是swig對(duì)回調(diào)函數(shù)的支持不是很好,
另外,如果用swig,很多情況下,你要寫額外的代碼將輸入的參數(shù)轉(zhuǎn)換成python對(duì)象以及將輸出轉(zhuǎn)成python對(duì)象,例如如果封裝的一個(gè)C函數(shù)的參數(shù)是輸入輸出的話,又如如果C函數(shù)的參數(shù)中有回調(diào)函數(shù)的話
而在Cython,C里的類型,如int,float,long,char*等都會(huì)在必要的時(shí)候自動(dòng)轉(zhuǎn)成python對(duì)象,或者從python對(duì)象轉(zhuǎn)成C類型,在轉(zhuǎn)換失敗時(shí)會(huì)拋出異常,這正是Cython最神奇的地方
另外,Cython對(duì)回調(diào)函數(shù)的支持也很好。
總之,如果你有寫python擴(kuò)展模塊的需求,那么Cython真的是一個(gè)很好的工具
二、安轉(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即可驗(yàn)證是否安裝成功
三、使用
1、編寫以.pyx為擴(kuò)展名的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é)果會(huì)生成兩個(gè)文件:hello.c和hello.so(用PyObject*封裝好的文件)
4.用python調(diào)用hello.so,調(diào)用文件為test.py
importhello
hello.say_hello_to("hi,cython!!")
cython的主要目的是:簡(jiǎn)化python調(diào)用c語(yǔ)言程序的繁瑣封裝過(guò)程,提高python代碼執(zhí)行速度(C語(yǔ)言的執(zhí)行速度比python快)
以上內(nèi)容為大家介紹了python之Cython安裝與使用入門,希望對(duì)大家有所幫助,如果想要了解更多Python相關(guān)知識(shí),請(qǐng)關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。http://m.2667701.com/