博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C Python类型互换
阅读量:7196 次
发布时间:2019-06-29

本文共 2031 字,大约阅读时间需要 6 分钟。

  从Python到C的转换用PyArg_Parse*系列函数,int PyArg_ParseTuple():把Python传过来的参数转为C;int PyArg_ParseTupleAndKeywords()与PyArg_ParseTuple()作用相同,但是同时解析关键字参数;它们的用法跟C的sscanf函数很像,都接受一个字符串流,并根据一个指定的格式字符串进行解析,把结果放入到相应的指针所指的变量中去,它们的返回值为1表示解析成功,返回值为0表示失败。

  从C到Python的转换函数是PyObject* Py_BuildValue():把C的数据转为Python的一个对象或一组对象,然后返回之;Py_BuildValue的用法跟sprintf很像,把所有的参数按格式字符串所指定的格式转换成一个Python的对象。

        C与Python之间数据转换的转换代码:

 

1 #include "stdafx.h" 2 #include "python.h" 3  4  5 int _tmain(int argc, _TCHAR* argv[]) 6 { 7     Py_Initialize(); 8  9     if (!Py_IsInitialized())10     {11         printf("initialization fail!");12         return -1;13     }14 15     PyRun_SimpleString("import sys");16     PyRun_SimpleString("sys.path.append('./')");17 18     PyObject *pModule = NULL, *pDict = NULL, *pFunc = NULL, *pArg = NULL, *result = NULL;19 20     pModule = PyImport_ImportModule("demo");    //引入模块21 22     if (!pModule)23     {24         printf("import module fail!");25         return -2;26     }27 28     pDict = PyModule_GetDict(pModule); //获取模块字典属性 //相当于Python模块对象的__dict__ 属性29     if (!pDict)30     {31         printf("find dictionary fail!");32         return -3;33     }34 35     pFunc = PyDict_GetItemString(pDict, "add"); //从字典属性中获取函数36     if (!pFunc || !PyCallable_Check(pFunc))37     {38         printf("find function fail!");39         return -4;40     }41 42     /*43     // 参数进栈44     *pArgs;45     pArgs = PyTuple_New(2);46 47     PyTuple_SetItem(pArgs, 0, Py_BuildValue("l",3));48     PyTuple_SetItem(pArgs, 1, Py_BuildValue("l",4));49     */50 51     pArg = Py_BuildValue("(i, i)", 1, 2); //参数类型转换,传递两个整型参数52     result = PyEval_CallObject(pFunc, pArg); //调用函数,并得到python类型的返回值53 54     int sum;55     PyArg_Parse(result, "i", &sum); //将python类型的返回值转换为c/c++类型56     printf("sum=%d\n", sum);57 58     PyRun_SimpleString("print 'hello world!' ");59     60     Py_DecRef(pModule);61     Py_DecRef(pDict);62     Py_DecRef(pFunc);63     Py_DecRef(pArg);64     Py_DecRef(result);65     66 67     Py_Finalize();68 69     getchar();70     return 0;71 }

 

转载地址:http://xftkm.baihongyu.com/

你可能感兴趣的文章
字体大宝库:25款精美的常用英文字体下载
查看>>
解决 Gtk-WARNING **: 无法在模块路径中找到主题引擎 pixmap
查看>>
HDU 1733 Escape
查看>>
Windows Phone卡通益智类游戏“狼来啦”
查看>>
记录我对枚举的初识
查看>>
spring aop实现权限控制,路径控制
查看>>
面试经验:Facebook面试问题总结
查看>>
[铁道部信息化管理]12306的已知信息、数据及问题
查看>>
display属性
查看>>
析构函数
查看>>
JavaScript:关于"超长原型链"的解释
查看>>
[译]JavaScript中对象的属性
查看>>
vimmate
查看>>
Drupal 7 安装 TinyMCE。
查看>>
浅谈SQL SERVER中事务的ACID
查看>>
Android中的DownloadManager
查看>>
[服务器开发]可伸缩系统的设计模式(译)
查看>>
【短语学习】狮子那一份the lions share
查看>>
poj1011
查看>>
class和struct
查看>>