摘要: Python是解释性语言, 底层就是用c实现的, 所以用python调用C是很容易的, 下面就总结一下各种调用的方法, 给出例子, 所有例子都在ubuntu9.10, python2.6下试过. 1.
Python是解释性语言, 底层就是用c实现的, 所以用python调用C是很容易的, 下面就总结一下各种调用的方法, 给出例子, 所有例子都在ubuntu9.10, python2.6下试过.
1. Python 调用 C (base)
想在python中调用c函数, 如这儿的fact
#include
int fact(int n)
{
if (n <= 1)
return 1;
else
return n * fact(n - 1);
}
PyObject* wrap_fact(PyObject* self, PyObject* args)
{
int n, result;
if (! PyArg_ParseTuple(args, "i:fact", &n))
return NULL;
result = fact(n);
return Py_BuildValue("i", result);
}
static PyMethodDef exampleMethods[] =
{
{"fact", wrap_fact, METH_VARARGS, "Caculate N!"},
{NULL, NULL}
};
void initexample()
{
PyObject* m;
m = Py_InitModule("example", exampleMethods);
}
把这段代码存为wrapper.c, 编成so库,
gcc -fPIC wrapper.c -o example.so -shared -I/usr/include/python2.6 -I/usr/lib/python2.6/config
然后在有此so库的目录, 进入python, 可以如下使用
import example
example.fact(4)
2. Python 调用 C++ (base)
在python中调用C++类成员函数, 如下调用TestFact类中的fact函数,
#include
class TestFact{
public:
TestFact(){};
~TestFact(){};
int fact(int n);
};
int TestFact::fact(int n)
{
if (n <= 1)
return 1;
else
return n * (n - 1);
}
int fact(int n)
{
TestFact t;
return t.fact(n);
}
PyObject* wrap_fact(PyObject* self, PyObject* args)
{
int n, result;
if (! PyArg_ParseTuple(args, "i:fact", &n))
return NULL;
result = fact(n);
return Py_BuildValue("i", result);
}
static PyMethodDef exampleMethods[] =
{
{"fact", wrap_fact, METH_VARARGS, "Caculate N!"},
{NULL, NULL}
};
extern "C" //不加会导致找不到initexample
void initexample()
{
PyObject* m;
m = Py_InitModule("example", exampleMethods);
}
把这段代码存为wrapper.cpp, 编成so库,
g++ -fPIC wrapper.cpp -o example.so -shared -I/usr/include/python2.6 -I/usr/lib/python2.6/config
然后在有此so库的目录, 进入python, 可以如下使用
http://click.aliyun.com/m/23315/
分享到:
相关推荐
本篇将详细介绍这两个示例`pyton_C`和`python_C++`所展示的Python调用C/C++的方法。 1. Python调用C:通过`ctypes`库 `ctypes`是Python的标准库之一,它允许我们直接调用C语言编写的动态链接库(.dll或.so文件)。...
基于python+C/C++开发语音识别的移动机器人路径控制系统+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于python+C/C++开发语音识别的移动机器人路径控制...
Python调用C/C++动态链接库(DLL)是跨语言编程中常见的技术,它允许Python程序利用C或C++编写的高效代码。本篇将详细解释如何实现这一过程。 首先,我们需要了解C/C++动态链接库。DLL(Dynamic Link Library)是一种...
本资源提供了基于Python和C/C++两种编程语言的特征值和特征向量求解源代码,便于开发者和学习者进行实践操作。 首先,我们来看Python实现。Python以其简洁易读的语法和丰富的科学计算库而被广泛用于数据分析和算法...
python使用ctypes调用C/C++ 1. ctpes介绍 ctypes is a foreign function library for Python. It provides C compatible data types, and allows calling functions in DLLs or shared libraries. It can be used to...
大公司是如何做信息安全管理的__程序员注意事项__Java_Python_C语言_C++等项目管理
程序员宝库,开源社区GitHub到底该怎么玩__如何玩转Github__Java_Python_C语言_C++开源项目聚集地
在这个案例中,我们关注的是C/C++与Python的混编,具体是将C/C++编译成动态链接库(.so文件),然后在Python环境中进行调用。下面我们将详细介绍这个过程涉及的知识点。 1. **C/C++动态链接库**:.so文件是Linux...
这个工具可能包含了编译和运行C/C++代码的功能,通过接口调用相应的编译器(如GCC或Clang)。 4. **Java**: Java是一种跨平台的面向对象的语言,广泛应用于企业级应用开发。该工具可能集成了JDK,允许用户编写、...
该项目是一款基于Python和C/C++开发的智能停车场系统源码,总共有55个文件,其中包含16个C语言源文件、15个C头文件、11个图片文件、7个Python脚本文件、2个C++源文件、1个Markdown文件、1个视频处理脚本、1个项目...
`ctypes`是Python的一个标准库,它允许我们直接调用C语言编译的动态链接库,从而实现了Python与C/C++代码的交互。 首先,我们需要理解DLL是什么。DLL(Dynamic Link Library)是Windows操作系统中的一个共享库,...
本项目为基于Python与C/C++开发的机器视觉智能垃圾桶机器人设计源码,总共有24个文件组成,涵盖了6个Markdown文档、6个头文件、5个YAML配置文件、2个DLL库文件、1个.gitignore文件、1个C源文件、1个目标文件、1个库...
一、配置python环境问题 1.首先安装Python(版本无所谓),安装的时候选的添加python路径到环境变量中 安装之后的文件夹如下所示: 2.在VS中配置环境和库 右击项目->属性->VC++目录 1)包含目录: Python安装路径/...
Cython提供了`cdef`和`cpdef`关键字,用于定义C/C++级别的类型和函数,使得Python可以直接访问这些底层功能。在提供的`CythonStudy-master`压缩包中,可能包含了一些Cython调用C++的示例代码,可以作为学习参考。 2...
视频演示如何玩转一个开源项目__如何运行+如何读代码__顺便讲讲IDEA和Spring_Boot__Java_Python_C语
虽然Python以其简洁易学的语法受到很多初学者的喜爱,但对于希望深入了解计算机工作原理和编程底层细节的人来说,学习C/C++仍然是一个更好的选择。Python更适合于数据科学、机器学习等领域。 ##### 9. 学习C/C++...
通过这个API,我们可以从C/C++代码中调用Python函数、执行Python脚本、创建和操作Python对象。这个过程涉及的主要步骤包括: 1. 初始化Python解释器:在运行任何Python代码之前,必须先初始化解释器。这通常通过`Py...
SWIG工具,C/C++到python、tcl的接口 SWIG(Simplified Wrapper and Interface Generator)是一种开源的接口生成工具,可以将C/C++语言与各种脚本语言集成,包括Python、Tcl、Perl、 Ruby等。SWIG的主要功能是生成...
该项目是一款基于无GPS导航的稳定攻击算法设计源码,包含40个文件,涵盖7个Python脚本、3个Markdown文档、2个文本文件、2个启动脚本、2个XML文件、2个Python编译文件、1个Rviz配置文件、1个C++头文件和1个C++源文件...