百科狗-知识改变命运!
--

python之Cython安装与使用入门

是丫丫呀1年前 (2023-11-21)阅读数 42#技术干货
文章标签函数

一、Cython是什么?

它是一个用来快速生成Python扩展模块(extentionmodule)的工具

它的语法是python语言语法和c语言语法的混血

他比swig更容易编写python的扩展模块

也许你会说swig可以直接通过c的头文件生成扩展模块,但是swig对回调函数的支持不是很好,

另外,如果用swig,很多情况下,你要写额外的代码将输入的参数转换成python对象以及将输出转成python对象,例如如果封装的一个C函数的参数是输入输出的话,又如如果C函数的参数中有回调函数的话

而在Cython,C里的类型,如int,float,long,char*等都会在必要的时候自动转成python对象,或者从python对象转成C类型,在转换失败时会抛出异常,这正是Cython最神奇的地方

另外,Cython对回调函数的支持也很好。

总之,如果你有写python扩展模块的需求,那么Cython真的是一个很好的工具

二、安转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程序转化成hello.c,并编译成so文件

fromdistutils.coreimportsetup

fromdistutils.extensionimportExtension

fromCython.Distutilsimportbuild_ext

ext_modules=[Extension("hello",["hello.pyx"])]

setup(

python之Cython安装与使用入门

name='Helloworldapp',

cmdclass={'build_ext':build_ext},

ext_modules=ext_modules

)

3.执行python程序

[blueelwang@pythontab~]$pythonsetup.pybuild_ext--inplace

执行的结果会生成两个文件:hello.c和hello.so(用PyObject*封装好的文件)

4.用python调用hello.so,调用文件为test.py

importhello

hello.say_hello_to("hi,cython!!")

cython的主要目的是:简化python调用c语言程序的繁琐封装过程,提高python代码执行速度(C语言的执行速度比python快)

以上内容为大家介绍了python之Cython安装与使用入门,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注IT培训机构:开发教育。http://www.baikegou.com/

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)