2012-07-12 264 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