python和c函数 python与c

c语言python有什么区别Python和C语言的区别:
1、语言类型:Python是一种基于解释器的语言 , 解释器会逐行读取代码 , 将Python编译为字节码,然后由大型C程序解释;C是一种编译语言,完整的源代码将直接编译为机器代码,由CPU直接执行 。
2、内存管理:Python使用自动垃圾收集器进行内存管理;C语言中程序员必须自己进行内存管理 。
3、应用:Python是一门通用编程语言,一个多范式,面向对象编程、程序编程、函数编程;C是结构化的编程语言,允许使用函数,选择 , 迭代 , 主要用于硬件相关的应用程序 。
4、速度:在运行速度方面 , Python比较慢,C语言比较快,因为C语言是底层语言,运行效率优于Python 。
5、复杂度:Python不需要声明变量类型,C语言需要声明变量类型;Python更易于学习,编写以及阅读,而C语言语法更加难 。
python调用c函数Python是解释性语言, 底层就是用c实现python和c函数的, 所以用python调用C是很容易python和c函数的, 下面就总结一下各种调用python和c函数的方法, 给出例子, 所有例子都在ubuntu9.10, python2.6下试过
1. Python 调用 C (base)
想在python中调用c函数, 如这儿的fact
#include Python.h
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 Python.h
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, 可以如下使用
import example
example.fact(4)
3. Python 调用 C(Boost.Python)
Boost库是非常强大的库, 其中的python库可以用来封装c被python调用, 功能比较强大, 不但可以封装函数还能封装类, 类成员.
首先在ubuntu下安装boost.python, apt-get install libboost-python-dev
#include boost/python.hpp
char const* greet()
{
return "hello, world";
}
BOOST_PYTHON_MODULE(hello)
{
using namespace boost::python;
def("greet", greet);
}
把代码存为hello.cpp, 编译成so库
ghello.cpp -o hello.so -shared -I/usr/include/python2.5 -I/usr/lib/python2.5/config -lboost_python-gcc42-mt-1_34_1
此处python路径设为你的python路径, 并且必须加-lboost_python-gcc42-mt-1_34_1, 这个库名不一定是这个, 去/user/lib查
然后在有此so库的目录, 进入python, 可以如下使用
import hello
hello.greet()
'hello, world'
4. python 调用 c(ctypes)
ctypes is an advanced ffi (Foreign Function Interface) package for Python 2.3 and higher. In Python 2.5 it is already included.
ctypes allows to call functions in dlls/shared libraries and has extensive facilities to create, access and manipulate simple and complicated C data types in Python - in other words: wrap libraries in pure Python. It is even possible to implement C callback functions in pure Python.
#include Python.h
class TestFact{
public:
TestFact(){};
~TestFact(){};
int fact(int n);
};
int TestFact::fact(int n)
{
if (n = 1)
return 1;
else
return n * (n - 1);
}
extern "C"
int fact(int n)
{
TestFact t;
return t.fact(n);
}
将代码存为wrapper.cpp不用写python接口封装, 直接编译成so库,
g-fPIC wrapper.cpp -o example.so -shared -I/usr/include/python2.6 -I/usr/lib/python2.6/config
进入python, 可以如下使用
import ctypes
pdll = ctypes.CDLL('/home/ubuntu/tmp/example.so')
pdll.fact(4)
12
python与c语言的关系1、语言类型不同
Python是一种动态类型语言,又是强类型语言;C语言是静态类型语言,在编译期间就确定数据类型的语言;
2、内存管理不同
Python使用自动垃圾收集器进行内存管理;C语言中程序员必须自己进行内存管理;
 3、对象机制不同
Python所有的数据 , 都是由对象或者对象之间的关系表示的,函数是对象,字符串是对象 , 每个东西都是对象的概念;C语言中没有对象这个概念,只有数据的表示 。
4、运行效率不同
Python有一个GIL锁 , 导致其对多线程支持不够好,运行速度比较慢;C语言比较快,是很好的底层语言 , 运行效率上优于Python 。
5、变量类型不同
Python有六个标准的数据类型,包含Number数字、String字符串、List列表、Tuple元祖、Sets集合、Dictionary字典;数字类型有四种,包含:整数、布尔型、浮点数和复数 。C语言也分为四大类,其中包含基本类型、枚举类型、void的类型、派生类型,基本类型包含整数类型、浮点类型 。
6、函数库的使用方法不同
C语言中使用库函数,需要引入头文件用include引入;Python中需要引入别的模块或者函数时需要用import引入 。
【python和c函数 python与c】关于python和c函数和python与c的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读