您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息
三六零分类信息网 > 肇庆分类信息网,免费分类信息发布

双剑合璧,Python调用C代码

2023/9/8 0:12:42发布51次查看
作为一种动态语言,python的语法灵活,表达强大,因此备受大家青睐,成为目前最受欢迎的语言之一。但是与此同时,灵活的语言特性所带来的代价是性能的降低。因此,python在一些计算密集型的场景中,与一些底层语言,如c、c++相比,往往显得力不从心。那么,python有没有办法在保持优秀语法特性的同时,还能够在性能上得到提升呢?当然可以。既然c语言的效率高,那么我们把程序中对性能要求较高的部分用c语言来实现就是一种解决方案。
在本文中,我们将用c语言实现一个python模块,并在python代码中对其进行调用。作为例子,这个模块中将包含两个简单的函数:
hello world斐波那契函数
c文件
首先我们创建一个.c文件,并且加入
#include
其中包含了必要的用c语言实现的python对象
setup.py
接下来,我们利用python中提供方法将c代码作为扩展模块加入到python模块中
构建模块并运行
执行:
python setup.py build
python setup.py install
我们会得到类似下面的输出:
$ python3.6 setup.py buildrunning buildrunning build_extbuilding 'mymodule' extension/usr/bin/clang -fno-strict-aliasing -wsign-compare -fno-common -dynamic -dndebug -g -fwrapv -o3 -wall -wstrict-prototypes -arch i386 -arch x86_64 -g -i/library/frameworks/python.framework/versions/3.6/include/python3.6m -c test.c -o build/temp.macosx-10.6-intel-3.6/test.o/usr/bin/clang -bundle -undefined dynamic_lookup -arch i386 -arch x86_64 -g build/temp.macosx-10.6-intel-3.6/test.o -o build/lib.macosx-10.6-intel-3.6/mymodule.cpython-36m-darwin.so$ python3.6 setup.py installrunning installrunning buildrunning build_extrunning install_libcopying build/lib.macosx-10.6-intel-3.6/mymodule.cpython-36m-darwin.so -> /library/frameworks/python.framework/versions/3.6/lib/python3.6/site-packagesrunning install_egg_inforemoving /library/frameworks/python.framework/versions/3.6/lib/python3.6/site-packages/mymodule-1.0-py3.6.egg-infowriting /library/frameworks/python.framework/versions/3.6/lib/python3.6/site-packages/mymodule-1.0-py3.6.egg-info $ python3.6python 3.6.0 (v3.6.0:41df79263a11, dec 22 2016, 17:23:13)[gcc 4.2.1 (apple inc. build 5666) (dot 3)] on darwintype help, copyright, credits or license for more information.>>> import mymodule>>> mymodule.helloworld()hello world>>>
在另外一个例子斐波那契函数中,我们将展示如何在c函数中传递参数和返回值:
经过构建后,就可以调用了:
这就是在python中调用c代码最基本的用法,希望对大家有用。欢迎大家留言讨论。
肇庆分类信息网,免费分类信息发布

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录