〈详解〉Python3调用C程序

简介: 胶水语言python为什么要调用c ?c与python对比python不擅长"大量运算"任务;python程序优势在于:编写简单,适合"IO密集型作业"(比如打开文件,下载图片,运行脚本).
胶水语言

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()

目录
相关文章
|
1天前
|
Linux Python Windows
打包Python程序文件:pyinstaller实现
本文介绍基于Python语言中的pyinstaller模块,将写好的.py格式的Python代码及其所用到的所有第三方库打包,生成.exe格式的可执行文件,从而方便地在其他环境、其他电脑中直接执行这一可执行文件的方法。
|
2天前
|
数据采集 JSON 数据库
800个程序实例、5万行代码!清华大学出版【Python王者归来】
Python 的丰富模块(module)以及广泛的应用范围,使 Python 成为当下最重要的计算机语言之一,本书尝试将所有常用模块与应用分门别类组织起来,相信只要读者遵循本书实例,定可以轻松学会 Python 语法与应用,逐步向 Python 高手之路迈进,这也是撰写本书的目的。 本书以约 800 个程序实例讲解了:完整的 Python 语法,Python 的输入与输出,Python 的数据型态,列表(list)、元组(tuple)、字典(dict)、集合(set),函数设计,类别设计,使用系统与外部模块(module),设计自己的模块(module),文件压缩与解压缩,程序除错与异常处理…
|
5天前
|
数据库连接 Python
如何提高python程序代码的健壮性
在编程的时候,我们难免会遇到一些不可靠的情况,比如网络请求失败,数据库连接超时等等。这些不确定性会让我们的程序容易出现各种错误和异常。那么如何来增加程序的容错性和健壮性呢? 可能大多数人会想到使用try except来进行异常捕捉进行失败重试(Retry)。虽然try-escept一个非常常见和有效的方式来增强程序稳定性,但是可能一不小心就会造成栈溢出。 所以接下来我就来介绍一个另外的一个专门用于失败重试的库:retrying。
|
5天前
|
存储 算法 Python
Python编程作业一:程序基本流程
Python编程作业一:程序基本流程
13 0
|
5天前
|
网络协议 Python
在python中利用TCP协议编写简单网络通信程序,要求服务器端和客户端进行信息互传。 - 蓝易云
在这个示例中,服务器端创建一个socket并监听本地的12345端口。当客户端连接后,服务器发送一条欢迎消息,然后关闭连接。客户端创建一个socket,连接到服务器,接收消息,然后关闭连接。
58 0
|
6天前
|
数据采集 安全 数据挖掘
2024年最新7 年 Python 的我,总结了这 90 条写 Python 程序的建议,上海大厂Python面试经历
2024年最新7 年 Python 的我,总结了这 90 条写 Python 程序的建议,上海大厂Python面试经历
2024年最新7 年 Python 的我,总结了这 90 条写 Python 程序的建议,上海大厂Python面试经历
|
6天前
|
Python
2024年最新【Python】程序的组织结构:顺序结构,2024年最新46道面试题带你了解中高级Python面试
2024年最新【Python】程序的组织结构:顺序结构,2024年最新46道面试题带你了解中高级Python面试
2024年最新【Python】程序的组织结构:顺序结构,2024年最新46道面试题带你了解中高级Python面试
|
6天前
|
机器学习/深度学习 数据采集 数据挖掘
90%的人说Python程序慢,5大神招让你的代码像赛车一样跑起来_代码需要跑很久怎么办(2)
90%的人说Python程序慢,5大神招让你的代码像赛车一样跑起来_代码需要跑很久怎么办(2)
|
7天前
|
机器学习/深度学习 数据采集 Java
如何提高Python程序的性能
Python作为一种高级编程语言,具有易学易用、开发效率高等优点,但其在性能上可能不如C++或Java。本文将介绍如何通过一些技巧和工具来提高Python程序的性能。
|
11天前
|
Python
【Python进阶(二)】——程序调试方法
【Python进阶(二)】——程序调试方法