我已经阅读了很多地方(包括SO),cython可以将结构转换为字典,但我似乎无法在文档中找到它。这真的发生了吗?如果是这样,在什么情况下会发生这种情况?
我无法使用以下代码执行此操作:
# pxd:
cdef extern from "main.h":
ctypedef struct something_t:
int a
int b
# pyx:
cdef public void do_stuff(something_t *number):
number.a = 1 # works
number[0].a = 2 # works
number['a'] = 3 # doesn't work: Cannot assign type 'long' to 'something_t'
number[0]['a'] = 4 # doesn't work: Cannot assign type 'long' to 'something_t'
答案 0 :(得分:1)
当C结构类型(cdef struct
或ctypedef struct
)的变量转换为Python object
类型的变量时,会发生这种情况。
cdef something_t s = [1, 2] # declare and initialize C struct
cdef object sobj = s # sobj is assigned {'a': 1, 'b': 2} from s data
它只是一种自动转换,仅此而已。您不能像在您的示例中那样使用带有C语言结构的Cict语法或使用Python结构的C结构语法。