前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >〈详解〉Python3调用C程序

〈详解〉Python3调用C程序

作者头像
zhaoolee
发布2018-04-19 10:22:59
1.1K0
发布2018-04-19 10:22:59
举报
文章被收录于专栏:木子昭的博客木子昭的博客

胶水语言

python为什么要调用c ?

c与python对比

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

2.在python文件中导入头文件

示例
  • from ctypes import *

3.在python中引入c动态库,并用变量接收动态库的引用

格式
  • 变量名 = cdll.LoadLibrary("动态库文件路径")
示例
  • result = cdll.LodaLibrary("./c_dll.so")

4.调用动态库方法

格式
  • 动态库引用.库函数(参数)
示例
  • result.my_add(num)

附源码:

c_add.py

import time
from ctypes import *
def main():
    num = int(input("请输入整数值:"))
    result = 0
    start_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 time

def main():
    num = int(input("请输入整数值:"))
    result = 0
    start_time = time.time()

    for i in range(num+1):
        result += i
    print("从1到%d累加的计算结果为%d"%(num,result))
    end_time = time.time()
    print("总共用时%s"%(end_time-start_time))
    
if __name__ == "__main__":
    main()
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.08.20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • python为什么要调用c ?
  • python调用c语言代码的方式十分简单,只需四步:
    • 1.将.c后缀的文件编译为动态库文件(.so结尾)
      • 格式
      • 示例
    • 2.在python文件中导入头文件
      • 示例
    • 3.在python中引入c动态库,并用变量接收动态库的引用
      • 格式
      • 示例
    • 4.调用动态库方法
      • 格式
      • 示例
  • 附源码:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档