【发布时间】:2014-09-22 19:22:44
【问题描述】:
警告:我是 Cython 的新手。 :D 我有以下代码:
my_structs.h:
typedef struct Dataset{
int lines;
char **tid;
}Dataset;
myiolib.pyx:
from libc.stdlib cimport malloc
from libc.string cimport strcpy
from cpython.string cimport PyString_AsString
cdef extern from "my_structs.h":
cdef struct Dataset:
int lines
char **tid
cdef Dataset readDataset(TID_name):
cdef:
int i, line_count=0
Dataset instance
with open(TID_name, 'rU') as file_iter:
for line in file_iter:
line_count=line_count+1
instance.tid = <char **>malloc(line_count * sizeof(char *))
i = 0
with open(TID_name, 'rU') as file_iter:
for line in file_iter:
instance.tid[i] = <char *>malloc((len(line)+1) * sizeof(char ))
strcpy(instance.tid[i], PyString_AsString(line.strip()))
i += 1
instance.lines = line_count
return instance
mytest.pyx:
import myiolib
cdef extern from "my_structs.h":
cdef struct Dataset:
int lines
char **tid
def test():
cdef Dataset D
D = myiolib.readDataset("test.dat")
# Do something...
# Free memory (?!)
test.py:
import mytest
mytest.test()
当我输入: cython -a mytest.pyx 时,它说:“无法将 Python 对象转换为‘数据集’”, 指向 D = myiolib.readDataset("test.dat")。 为什么?我不明白...我做错了什么?
【问题讨论】: