【Python】调用C语言

举报
会振刀的程序员 发表于 2023/05/16 14:55:36 2023/05/16
【摘要】 Python调用C语言前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。首先把文件.c转换成.dll或者.so。Windows下Demo亲测一波,话不多说,上图上代码。foo.c:# include<stdio.h>int foo(){ int i,k,m; for(i=0;i<1000;i++){ for(k=0;k<1000;k++){ f...
Python调用C语言
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

首先把文件.c转换成.dll或者.so。
Windows下Demo亲测一波,话不多说,上图上代码。
foo.c:

# include<stdio.h>

int foo(){
int i,k,m;
for(i=0;i<1000;i++){
for(k=0;k<1000;k++){
for(m=0;m<1000;m++) {
}
}
}
return 0; 
}
将C语言代码保存为.c文件。在当前目录下进入cmd。(前提是有mingw环境,很简单,网上很多教程。)执行命令gcc -o foo.so -shared -fPIC foo.c转化为.so文件,gcc foo.c -shared -o foo.dll转化为.dll文件。

python代码

from ctypes import cdll
from time import time

#.c-->.so
start=time()
dll=cdll.LoadLibrary('./foo.so')
dll.foo()
print(f'c,so:{time()-start}')

#.c-->.dll
start=time()
dll=cdll.LoadLibrary('./foo.dll')
dll.foo()
print(f'c,dll:{time()-start}')

#Python
start=time()
for i in  range(1000):
    for k in range(1000):
        for m in range(1000):
            pass
print(f'python:{time()-start}')
在这里插入图片描述
可以看到;so、dll文件都可在windows环境下供python使用。并且可以看到上述Demo中,C的速度比Python快近20倍。
我个人比较喜欢Python+C混合编程这种方式,原因主要有几点:
1、提高性能,弥补了python性能上的不足。
2、相对安全,对dll文件或so文件进行加密,有效防止逆解析保证代码安全。
3、结合Python强大的生态环境,也满足了高效快速的开发。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。