假设我有一个如此定义的结构:
cdef extern from "blah.h":
struct my_struct:
int a
int b
我需要能够将dict
转换为my_struct
,而无需了解my_struct的字段。换句话说,我需要进行以下转换:
def do_something(dict_arg):
cdef my_struct s = dict_arg
do_somthing_with_s(s)
问题是Cython不会这样做:http://docs.cython.org/src/userguide/language_basics.html#automatic-type-conversions
当然,如果我对my_struct
字段的名称有所了解,我可以这样做:
def do_something(dict_arg):
cdef my_struct s = my_struct(a=dict_arg['a'], b=dict_arg['b'])
do_somthing_with_s(s)
这样做会导致cython编译器崩溃:
def do_something(dict_arg):
cdef my_struct s = my_struct(**dict_arg)
do_somthing_with_s(s)
我不知道该字段名称的原因是因为代码是自动生成的,我不想做一个丑陋的黑客来处理这种情况。
如何使用Cython从Python dict初始化结构?
答案 0 :(得分:7)
您必须手动设置结构的每个元素。没有捷径。 如果您的代码是自动生成的,那么应该很容易自动生成内联函数 从PyDict到你的每个结构的转换。