python 调用c语言函数的方法

yipeiwu_com6年前Python基础

虽然python是万能的,但是对于某些特殊功能,需要c语言才能完成。这样,就需要用python来调用c的代码了

具体流程:

c编写相关函数 ,编译成库

然后在python中加载这些库,指定调用函数。

这些函数可以char ,int, float, 还能返回指针。

以下示例:

通过python调用c函数,返回"hello,world 字符串"

新建c语言文件 hello.c

touch hello.c

#include <stdio.h>

char *get_str()
{
  return "hello,world"
}

编译成库

gcc -o hello.so --share -fPIC hello.c

新建python脚本

touch test.py

from ctypes import *

dll = CDLL("./hello.so")
dll.get_str.restype = c_char_p
str = dll.get_str()
print(string_at(str, 11))

执行python脚本

[feng@arch python_c]$ python test.py 
hello,world

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

Python json 错误xx is not JSON serializable解决办法

Python json 错误xx is not JSON serializable解决办法 在使用json的时候经常会遇到xxx  is not JSON serializab...

深入解析Python中函数的参数与作用域

传递参数 函数传递参数时的一些简要的关键点: 参数的传递是通过自动将对象赋值给本地变量名来实现的。所有的参数实际上都是通过指针进行传递的,作为参数被传递的对象从来不自动拷贝。...

对python多线程与global变量详解

今天早上起来写爬虫,基本框架已经搭好,添加多线程爬取功能时,发现出错: 比如在下载文件的url列表中加入200个url,开启50个线程。我的爬虫…竟然将50个url爬取并全部命名为0.h...

基于pytorch的保存和加载模型参数的方法

当我们花费大量的精力训练完网络,下次预测数据时不想再(有时也不必再)训练一次时,这时候torch.save(),torch.load()就要登场了。 保存和加载模型参数有两种方式: 方式...

详解Python进程间通信之命名管道

管道是一种简单的FIFO通信信道,它是单向通信的。 通常启动进程创建一个管道,然后这个进程创建一个或者多个进程子进程接受管道信息,由于管道是单向通信,所以经常需要创建两个管道来实现双向通...