本文主要是介绍Python3调用C程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
python为什么要调用c?
python不擅长"大量运算"任务,python程序优势在于:编写简单,适合"IO密集型作业"(比如打开文件,下载图片,运行脚本)。python作为知名的"胶水语言",快速实现"计算密集型作业"的方法就是"把c的代码拿过来直接用"!
python调用c语言代码的方式十分简单,只需四步:
1. 将.c
后缀的文件编译为动态库文件(.so
结尾)
- gcc 原文件名.c -shared -o 新文件名.so
示例
- 以将
c_dll.c
编译为c_dll.so
为例gcc c_dll.c -shared -o c_dll.so //
gcc -o add.so --share -fPIC add.c
2. 在python文件中导入头文件
示例
from ctypes import *
3. 在python中引入c动态库,并用变量接收动态库的引用
- 变量名 = cdll.LoadLibrary("动态库文件路径")
示例
result = cdll.LodaLibrary("./c_dll.so")
4. 调用动态库方法
- 动态库引用.库函数(参数)
示例
result.my_add(num)
附源码:
c_add.py
#!/usr/bin/env python3
# -*- coding:UTF-8 -*-import time
from ctypes import *
def main():num = int(input("请输入整数值:"))result = 0start_time = time.time()result = cdll.LoadLibrary("./c_dll.so")result.my_add(num)end_time = time.time()print("总共用时%s"%(end_time-start_time))if __name__ == "__main__":main()
c_dll.c
#include <stdio.h>void my_add(int num)
{long int result = 0;for (long int i = 1; i <= num; i++) {result += i;}printf("从1到%d累加的计算结果为%ld\n", num, result);
}
最终文件目录
python_add.py
import timedef main():num = int(input("请输入整数值:"))result = 0start_time = time.time()for i in range(num+1):result += iprint("从1到%d累加的计算结果为%d"%(num,result))end_time = time.time()print("总共用时%s"%(end_time-start_time))if __name__ == "__main__":main()
这篇关于Python3调用C程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!