2012-08-13 104 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