在什么情况下Cython将结构转换为字典?

时间:2016-01-07 08:17:55

标签: python cython

我已经阅读了很多地方(包括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'

1 个答案:

答案 0 :(得分:1)

当C结构类型(cdef structctypedef 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结构语法。