考虑性能,我在 cython 中编写了一个函数来将 line 转换为 dict。这条线似乎
" a: 1 b:2 sdf:3.0 \t ggg:vv"
结果字典应该是
{'a': '1', 'b': '2', 'sdf': '3.0', 'ggg': 'vv'}
赛通代码是:
from libc.string cimport strsep, strlen, strdup
def line2dict(line):
cdef char* line_str = strdup(line)
cdef char* item_delim = " \t"
cdef char* kv_delim = ":"
cdef char* kv_str
cdef char* k_str
ret = {}
while 1:
kv_str = strsep(&line_str, item_delim)
if kv_str == NULL:
break
if strlen(kv_str) == 0:
continue
k_str = strsep(&kv_str, kv_delim)
ret[k_str] = kv_str
return ret
上面的代码可以编译成.so,在普通的python代码中导入和调用,但在后面的代码中可能会导致“Segmentation fault”。
我是cython的新手。谁能告诉我这段代码有什么问题?
谢谢!