`
linkyou66
  • 浏览: 234867 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

python 如何传递字典型变量(不定参数)给c++

 
阅读更多
<p>今天遇到一个难题,python要调用c++一个函数</p>
<p>c++函数是可变长的变量如add(int cmd,...)</p>
<p>然后再c++中使用va_list取得变长参数。</p>
<p>那么python 该如何调用该函数呢。弄了半天也没有发现boost.python如何支持该类型的参数。</p>
<p>后来一想,python dict不是就是可变长的参数吗,里边放什么都可以。</p>
<p>那么问题就转化问如何传递dict给c++。</p>
<p>贴源码如下:</p>
<p><strong>1.src.cpp</strong>
</p>
<p>#include &lt;iostream&gt;<br>
#include &lt;string&gt;<br>
#include&lt;stdarg.h&gt;<br>
#include &lt;Python.h&gt;<br>
using namespace std;<br><br>
/************************************************ simple method *************************************/<br>
void testA(PyObject *obj)<br>
{<br>
PyObject *ret = PyDict_GetItemString(obj, "b");<br>
int as = PyInt_AS_LONG(ret);<br>
printf( "**************************%d/n", as );<br>
}</p>
<p></p>
<p><strong>2.src4py.cpp</strong>
</p>
<p>#include &lt;boost/python.hpp&gt;<br>
#include &lt;boost/python/object_core.hpp&gt;<br>
#include "src.cpp"<br>
using namespace boost::python;<br>
BOOST_PYTHON_MODULE(test)<br>
{<br>
def("a", testA);<br>
}</p>
<p></p>
<p><strong>3.test.py</strong>
</p>
<p></p>
<p>import test<br>
a ={'b':2}<br>
test.a(a)</p>
<p><strong><br></strong>
</p>
<p><strong>4.makefile</strong>
</p>
<p><strong>all:test.so<br><br>
test.so:src.o src4py.o<br></strong>
g++ src4py.o -o test.so -shared -fPIC -I /usr/local/python/include/python2.5/ -I /usr/local/boost_143/include/ -L /usr/local/python/lib/python2.5/ -L<br>
/usr/local/boost_143/lib/ -lboost_python<br>
src.o:<br>
g++ -c src.cpp -o src.o -I /usr/local/python/include/python2.5/ <br>
src4py.o:src.o<br>
g++ -c src4py.cpp -o src4py.o -fPIC -I /usr/local/python/include/python2.5/ -I /usr/local/boost_143/include/ <br><br>
clean:<br>
rm -rf src.o src4py.o<br>
rm -rf test.so <strong><br></strong>
</p>
<p><strong><br></strong>
</p>
<p></p>
<p></p>
分享到:
评论

相关推荐

    Python面向对象编程.pptx

    4. **不定长参数**:这些参数允许我们传递任意数量的参数给函数。它们通常使用星号(*)来标记。 #### 五、变量作用域 在Python中,变量的作用域决定了变量可以在哪些代码区域中被访问。根据作用域的不同,可以分为...

    使用C(C++)扩展 Python(中文文档)

    `args`是一个指向Python tuple对象的指针,其中包含传递给函数的所有参数。 `PyArg_ParseTuple()`函数负责检查参数类型并将其转换为相应的C值。如果转换成功,则返回非零值;如果失败,则返回0,此时应当让`spam_...

    对C语言函数参数传递的探讨——以交换问题为例.pdf

    而现代编程语言如Python或JavaScript则提供了更高级的参数传递机制,如默认参数、关键字参数、不定长参数等,这些都极大地丰富了函数参数传递的表达能力。 在进行C语言编程实践时,考虑到函数参数传递的单向性及...

    2018 最新 Python3.5.2入门指南

    可以通过`def`关键字来定义函数,函数可以有参数,并且支持默认参数、关键字参数、不定数量的参数。`lambda`语句用于创建匿名函数,常用于创建简单的、一次性的、并且只使用一次的函数对象。 在数据结构方面,...

    Python_2.7中文文档

    - **C/C++ 扩展**:你可以轻松地使用 C 或 C++(或其他可通过 C 调用的语言)来为 Python 解释器扩展新的函数和数据类型。 - **定制应用程式**:Python 还可以用作定制应用程式的一种扩展语言。 #### 四、Python ...

    Python3 入门指南

    - **参数传递**:了解如何通过命令行传递参数给 Python 程序。 - **交互模式**:使用 Python 解释器的交互模式进行即时测试和调试。 - **解释器环境**: - **错误处理**:理解 Python 如何处理错误和异常。 - *...

    python试卷-共4页.pdf

    在 Python 中,`def myfunc(*args, a=1):` 是非法的,因为 `*args` 用于收集不定数量的位置参数,而后面的 `a=1` 是关键字参数,它们不能同时存在。正确答案是 A. 【Python 包管理工具】 Python 的包管理工具有很多...

    秒懂参数如何具体运用的介绍

    例如,Java支持final参数来防止方法内部修改,Python支持*args和**kwargs来处理不定数量的参数,JavaScript的箭头函数中,如果只有一个参数,可以省略括号。 六、最佳实践与注意事项 1. 尽量减少参数的数量,避免...

    python语言学习笔记.pdf

    - 参数传递,包括必需参数、关键字参数、默认参数和不定长参数; - 匿名函数,即lambda表达式; - 局部变量和全局变量。 十、文件 文件操作是编程中非常常见的一部分,Python提供了简单易用的文件操作API: - 打开...

    经典Python面试题之Python基础篇.docx

    25. ***arg和**kwarg**:*arg用于传递不定数量的位置参数,**kwarg用于传递不定数量的关键字参数。 26. **is与==**:is检查两个对象是否是同一个对象,而==检查值是否相等。 27. **深浅拷贝**:深拷贝复制对象及...

    NOIP2018提高组C++试题.pdf

    2.程序设计语言:竞赛题目涉及了C、C++、Pascal和Python等程序设计语言,要求学生了解这些语言的基本语法和特点。 3.全国青少年计算机程序设计竞赛:这是一项由中国计算机学会(CCF)创办的竞赛活动,旨在推广青...

    Python

    3. 函数:Python支持函数定义,包括内置函数、用户自定义函数、以及使用*args和**kwargs进行不定参数传递。 4. 类与对象:Python是面向对象的语言,支持类(class)、对象(object)、继承(inheritance)、多态...

    python基础之函数使用

    - Python采用传对象引用的方式,而不是像C++或Java那样传值。这意味着函数内部对参数的修改可能会影响原对象,除非参数是不可变类型(如数字、字符串、元组)。 9. **函数返回值**: - 使用`return`语句可以从...

    编写函数DM

    6. **可变参数**:在Python中,可以使用*args和**kwargs接收不定数量的位置参数和关键字参数,方便处理不确定数量的输入。 7. **递归函数**:函数自身调用自身,常用于解决具有自相似性质的问题,如阶乘计算、...

    2021-2022计算机二级等级考试试题及答案No.17332.docx

    **解释**:在Python中,通过在参数名称前加上星号(*)可以接收不定数量的位置参数。这些参数会被打包成一个元组(tuple)传递给函数。例如,在本例中,`fun1`函数接收两个必填参数`a`和`b`,以及一个可变参数列表`*args...

    Python_Work

    - 函数定义:Python允许使用def关键字定义函数,以及使用*args和**kwargs处理不定数量的参数。 - 异常处理:通过try-except-finally语句块进行异常处理。 2. **Python模块和包** - 模块:Python代码可以组织在...

    深入浅出ES6

    - Promise的实现参考了C++项目Xanadu、E语言、Python中的实现以及JavaScript框架Dojo中的Deferred对象。 3. **for-of循环**: - 类似于传统的`for`循环,但专门用于遍历可迭代对象。 - 受到C++、Java、C#等语言...

    2021-2022计算机二级等级考试试题及答案No.16967.docx

    3. scanf函数:在C语言中,`*p`表示取指针p所指向的变量的值,而不是指针变量p的地址,因此当尝试用`*p`给变量a输入数值时,会导致错误。 4. 多媒体信息:多媒体信息包括文本、声音和图像等,而光盘(CD)是一种...

    2021-2022计算机二级等级考试试题及答案No.18460.docx

    20. **Python函数参数**:Python中的`*args`用于接收不定数量的位置参数,调用`fun1(1,2,3,4,5,6)`会打印1, 2, (3, 4, 5, 6)。 21. (由于题目不完整,无法给出第21题的解答,但通常这类问题会涉及到函数调用、参数...

Global site tag (gtag.js) - Google Analytics