2012-08-13 105 views
3

如何处理,返回多个列表调用Python脚本

Python脚本Python函数:

display(): 
    a = [ 'a','b','abc'] 
    b = [ 1 , 2 , 3] 
    return [a,b] 

C函数调用上述Python函数的代码片段:

pValue,pValue1 = PyObject_CallObject(pFunc, pArgs); 

这是调用函数的正确方法吗? 但是,我不能使用这些对象来提取列表值。 我在做什么错?

+3

in python'return(a,b)'返回一个元组。一个单一的对象。在C中,你试图读取结果,就好像它是2个对象一样。请尝试返回'[a,b]'。因为列表比我想象的元组更容易处理。我的c很生锈。 – 2012-08-13 15:44:23

+1

示例是无效的Python代码。 – 2012-08-13 15:46:02

+0

C剂量做多个返回我的朋友。 – 2012-08-13 15:55:24

回答

1

您不会收到两个对象,您将收到实际上由您的函数返回的PyTuple的新引用。

+0

元组是发送多重对象回到c程序的唯一方法吗? – marvel 2012-08-13 18:42:06

+0

我可以发回一个列表元组吗? – marvel 2012-08-13 18:42:34

+0

你可以发送任何对象回c程序(在你的例子中它是元组) – 2012-08-13 18:49:56

3
PyObject *ret; 
ret=PyObject_CallObject(pFunc,pArgs); 
PyObject *ob1,*ob2; 

PyArg_ParseTuple(ret,"oo",ob1,ob2); //o-> pyobject |i-> int|s-> char* 

这就是你是如何做到的。

+0

我试过这个,但它不适用于我 – marvel 2012-08-13 16:03:08

+0

我试过这个,但它不适用于我。 这就是当我运行我的程序时得到的结果:异常exceptions.SystemError:'新样式getargs格式但参数不是元组'''垃圾回收'忽略 – marvel 2012-08-13 16:05:34

+0

即使我对此没有清楚的想法。我很久以前就和他合作过。尝试将返回封装在元组中,以便该指令可以工作。 类似于: return((a,b))#现在返回将是一个元组 否则,请在python文档中查找参数解析。实现函数调用和参数解析有两种以上的不同方式。 – 2012-08-13 16:08:24

2

所有的Python函数/方法都返回一个'东西',但'东西'可以是'容器'。你不断询问如何返回多个列表;你想要做的是返回一个元组,或者一个包含你想返回的'多个列表'的列表。然后,在调用代码中,访问元组或列表的元素以获得要返回的“多个列表”。

+0

谢谢。我会尝试返回一个包含多个列表的列表。 – marvel 2012-08-14 16:12:56