Предполагая, что у меня есть структура, определенная следующим образом:
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)
Причина, по которой я не знаю имя поля, заключается в том, что код генерируется автоматически, и я не хочу делать некрасивый хак для обработки этого случая.
Как инициализировать структуру из Python dict с Cython?