日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

c语言实现python列表_用C语言实现python的扩展模块

發布時間:2025/3/20 python 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言实现python列表_用C语言实现python的扩展模块 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

用C語言實現python的擴展模塊

示例1:

1 Example.c

int add(int a,int b)

{

return a+b;

}

int sub(int a,int b)

{

return a -b;

}

int mul(int a,int b)

{

return a*b;

}

int div1(int a,int b)

{

if(0 == b)

{

return b;

}

return a/b;

}

2 wrap.c

include //python.h中已經包含了常用的頭文件

PyObjectwrap_add(PyObject self, PyObject* args)

{

int n1,n2, result;

if (! PyArg_ParseTuple(args, “i|i”, &n1,&n2))

return NULL;

result = add(n1,n2);

return Py_BuildValue(“i”, result);

}

PyObjectwrap_sub(PyObject self, PyObject* args)

{

int n1,n2, result;

if (! PyArg_ParseTuple(args, “i|i”, &n1,&n2))

return NULL;

result = sub(n1,n2);

return Py_BuildValue(“i”, result);

}

PyObjectwrap_mul(PyObject self, PyObject* args)

{

int n1,n2, result;

if (! PyArg_ParseTuple(args, “i|i”, &n1,&n2))

return NULL;

result = mul(n1,n2);

return Py_BuildValue(“i”, result);

}

PyObjectwrap_div1(PyObject self, PyObject* args)

{

int n1,n2, result;

if (! PyArg_ParseTuple(args, “i|i”, &n1,&n2))

return NULL;

result = div1(n1,n2);

return Py_BuildValue(“i”, result);

}

static PyMethodDef exampleMethods[] =

{

{“add”, wrap_add, METH_VARARGS, “Caculate 1!“},

{“sub”, wrap_sub, METH_VARARGS, “Caculate 2!“},

{“mul”, wrap_mul, METH_VARARGS, “Caculate 3!“},

{“div1”, wrap_div1, METH_VARARGS, “Caculate 4!“},

{NULL, NULL,0,NULL}

};

void initexample()

{

PyObject* m;

m = Py_InitModule(“example”, exampleMethods);

}

3 編譯

gcc -fpic -c -I /usr/include/python2.6/ -I /usr/lib/python2.6/config example.c wrap.c

gcc -shared -o wrap.so wrap.o

4 功能演示截圖

5 主要參考:

5.1 Python的C語言擴展

http://www.ibm.com/developerworks/cn/linux/l-pythc/

5.2 淺談 Python 程序和 C 程序的整合

http://www.ibm.com/developerworks/cn/linux/l-cn-pythonandc/index.html?ca=drs-cn-0506

示例2:(支持回調python中定義的函數)

1 mytest.c

include

static PyObject my_callback = NULL;

static PyObject my_strlen(PyObject self, PyObjectargs)

{

char *string;

int len;

if (!PyArg_ParseTuple(args, “s”, &string))

return NULL;

len = strlen(string);

return Py_BuildValue(“i”, len);

}

static PyObjectmy_strcat(PyObjectself, PyObject *args)

{

char* string1;

char* string2;

char* newstring;

if (!PyArg_ParseTuple(args, "s|s", &string1, &string2))

return NULL;

newstring = strcat(string1, string2);

return Py_BuildValue("s", newstring);

}

static PyObjectmy_set_callback(PyObjectself, PyObject *args)

{

PyObject *result = NULL;

PyObject *temp;

if (PyArg_ParseTuple(args, "O", &temp))

{

if (!PyCallable_Check(temp))

{

PyErr_SetString(PyExc_TypeError, "parameter must be callable");

return NULL;

}

Py_XINCREF(temp);

Py_XDECREF(my_callback);

my_callback = temp;

Py_INCREF(Py_None);

result = Py_None;

}

return result;

}

static PyObjectmy_test_callback(PyObjectself, PyObject *args)

{

PyObject * arglist;

PyObject * result = NULL;

result = PyEval_CallObject(my_callback, args);

if (result == NULL)

{

return NULL;

}

Py_DECREF(result);

Py_INCREF(Py_None);

return Py_None;

}

static PyMethodDef mytestMethods[] =

{

{"mystrlen", my_strlen, METH_VARARGS, "We test strlen of C"},

{"mystrcat", my_strcat, METH_VARARGS, "We test strcat of C"},

{"mysetcallback", my_set_callback, METH_VARARGS, "we set a call back function so that call it in C"},

{"mytestcallback", my_test_callback, METH_VARARGS, "we use this function to test call back function"},

{NULL, NULL, 0, NULL}

};

void initmytest()

{

(void) Py_InitModule("mytest", mytestMethods);

}

2 編譯

gcc -fpic -c -I /usr/include/python2.6/ -I /usr/lib/python2.6/config mytest.c

gcc -shared -o mytest.so mytest.o

3 功能演示截圖

4 主要參考

4.1 . Calling Python Functions from C

4.2 在windows上擴展python

http://blog.chinaunix.net/space.php?uid=46552&do=blog&id=2116527

4.3 [精華] 在windows上擴展python(2)–從c中調用python函數

http://www.linuxforum.net/forum/gshowthreaded.php?Cat=&Board=python&Number=485550&page=3&view=collapsed&sb=5&o=all&vc=1

原文:http://my.oschina.net/innovation/blog/380514

總結

以上是生活随笔為你收集整理的c语言实现python列表_用C语言实现python的扩展模块的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚州精品视频 | 樱桃成人精品视频在线播放 | 亚洲免费观看高清在线观看 | 黄色aa毛片 | 91搞搞| 91美女免费看 | av射进来| 非洲黑寡妇性猛交视频 | 久久久久一级片 | 亚洲AV成人无码精品久久盆瓶 | 一级片亚洲| 欧美精品在线第一页 | 69视频免费看 | 另类综合小说 | 特大黑人娇小亚洲女mp4 | av免费视屏 | 国产主播专区 | av在线资源网站 | 波多野结衣在线免费观看视频 | 欧美一区二区三区婷婷 | 天天操夜夜草 | 国产欧美一区二区三区在线 | 美女少妇毛片 | 日韩在线一区二区 | 妻子的性幻想 | 黄色三级带| 亚洲精品一区在线观看 | 美女隐私免费网站 | 91小视频| 国产v综合v亚洲欧美久久 | 国产欧美在线精品日韩 | 色男人天堂av | 亚洲素人 | 精品国产乱码久久久久久浪潮 | 中国久久久久 | 亚洲精选一区 | 国产激情自拍 | 亚洲有吗在线 | 天天超碰 | 在线视频导航 | 青青草日本 | 欧美性猛交xx| 日本va在线观看 | 天天干天天插天天射 | 亚洲码中文 | 亚洲综合色网 | 精品一区二区三区无码视频 | 中文字幕人妻一区二区三区在线视频 | 激情超碰| 伊人久久中文字幕 | 色版视频在线观看 | 精品影视 | 99av视频| 李宗瑞91在线正在播放 | 视频在线91 | 成人看片 | 青青草原伊人 | 国产精品99999 | 毛片毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 色香蕉在线视频 | 久久露脸国语精品国产91 | 久久妇女 | 精品久久久久成人码免费动漫 | 麻豆视频入口 | 亚洲熟女少妇一区二区 | 男人日女人b视频 | 亚洲成人av电影在线 | 亚洲av无码一区二区乱孑伦as | 啪啪小视频 | 在线观看中文字幕第一页 | 久久黄色视屏 | 三级影片在线免费观看 | 久久久久久久久久久av | 3p视频在线| 欧美日韩一区二区综合 | jzjzjzjzj亚洲成熟少妇 | 67194成人在线观看 | 亚洲制服无码 | 成人一区二区三区视频 | 天天干网站 | 欧美色第一页 | 女人脱下裤子让男人桶 | 欧美片一区二区三区 | 人人搞人人插 | 国产精品午夜久久 | 丁香六月色 | 国产亚洲片 | 免费的毛片网站 | 精品国产乱码久久久久久浪潮 | 国产jizz18女人高潮 | 五月天综合社区 | a人片| 亚洲av无码一区二区三区观看 | 欧美日本在线观看 | 人人精品久久 | 中文av一区二区 | 人妖一区二区三区 | 国产成人在线免费 | 免费看片网站91 |