2012-07-12 271 views
2

我需要在cdef函數中將int列表的Python列表轉換爲vector [int]以調用另一個C函數。我嘗試這樣做:在Python中將Python列表轉換爲向量<int>

cdef pylist_to_handles(hs): 
    cdef vector[int] o_vect 
    for h in hs: 
     o_vect.push_back(h) 
    return o_vect 

這應該工作,因爲我只需要從其它CDEF函數調用它,我得到這個錯誤:

Cannot convert 'vector<int>' to Python object

我在做什麼錯?

回答

3

什麼你真的是這樣的:

cdef object pylist_to_handles(hs): 
    ... 
    return <object>o_vect 

如果沒有可明確設定一個類型,它被認爲是(以代碼「對象」)一個Python對象。正如你在代碼中看到的那樣,你正試圖將vector [int]轉換爲一個對象,但是Cython不知道如何處理它。

就在CDEF添加返回類型:

cdef vector[int] pylist_to_handles(hs): 
7

在用Cython 0.17使用libcpp.vector,你可以這樣做:

cdef vector[int] vect = hs