Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用超过1个返回值调用python脚本_Python_Python C Api - Fatal编程技术网

使用超过1个返回值调用python脚本

使用超过1个返回值调用python脚本,python,python-c-api,Python,Python C Api,如何处理返回多个列表的Python函数 Python脚本: display(): a = [ 'a','b','abc'] b = [ 1 , 2 , 3] return [a,b] 调用上述python函数的c函数片段: pValue,pValue1 = PyObject_CallObject(pFunc, pArgs); 这是调用函数的正确方法吗? 但是我不能使用对象来提取列表值。 我做错了什么?您没有收到两个对象,而是收到一个新的对PyTuple的引用,该引用实

如何处理返回多个列表的Python函数

Python脚本:

display():
    a = [ 'a','b','abc']
    b = [ 1 , 2 , 3]
    return [a,b]
调用上述python函数的c函数片段:

pValue,pValue1 = PyObject_CallObject(pFunc, pArgs);
这是调用函数的正确方法吗? 但是我不能使用对象来提取列表值。
我做错了什么?

您没有收到两个对象,而是收到一个新的对
PyTuple的引用,该引用实际上是由您的函数返回的

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

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

所有Python函数/方法都返回一个“thing”,但该“thing”可以是一个“container”。您不断询问如何返回多个列表;您要做的是返回一个元组或列表,其中包含要返回的“多个列表”。然后,在调用代码中,访问元组或列表的元素,以获得要返回的“多个列表”。

在python中
return(a,b)
返回元组。单个对象。在C语言中,您试图读取结果,就像它是两个对象一样。尝试返回
[a,b]
。因为我认为列表比元组更容易处理。我的c非常生疏。示例不是有效的Python代码。c不做多次返回,我的朋友。我尝试过这个,但对我不起作用。这是我运行程序时得到的:Exception exceptions.SystemError:“新样式的getargs格式,但参数不是元组”在“垃圾收集”ignoredEven中,我对此不清楚。我很久以前就和这个合作过。尝试将返回封装在一个元组中,以便此指令能够工作。类似于:return((a,b))#现在返回的是一个元组,否则,请在python文档中查找参数解析。有两种以上不同的方法来实现函数调用和参数解析。如果您对返回列表感兴趣,那么将考虑PyListObject。我使用它从m程序中的列表中提取值。我让它为一个列表工作,但是当python函数发回多个列表时,我就被卡住了。
PyArg_ParseTuple(ret,“O | O:ref”、&ob1和&ob2)
为我工作。元组是将多个对象发回c程序的唯一方法吗?我可以发回列表元组吗?你可以将任何对象发回c程序(在您的示例中是tuple)我如何发送多个列表?我的c程序应该如何解释itThanks。我将尝试返回一个包含多个列表的列表。