Вам нужно две строки:
%%cython
cpdef main():
cdef const char *headers[3]
headers[:] = ['to','from','sender`]
print(headers)
Несколько нелогично, чем присваивать строки юникода (Python3!) Для char*
.Это одна из причуд Cython.С другой стороны, при инициализации всего лишь одним значением необходим объект bytes:
%%cython
cpdef main():
cdef const char *headers[3]
headers[:] = b'init_value` ## unicode-string 'init_value' doesn't work.
print(headers)
Другой альтернативой является следующий oneliner:
%%cython
cpdef main():
cdef const char **headers=['to','from','sender`]
print(headers[0], headers[1], headers[2])
, который не являетсяточно так же, как указано выше, и приводит к следующему C-коду:
char const **__pyx_v_headers;
...
char const *__pyx_t_1[3];
...
__pyx_t_1[0] = ((char const *)"to");
__pyx_t_1[1] = ((char const *)"from");
__pyx_t_1[2] = ((char const *)"sender");
__pyx_v_headers = __pyx_t_1;
__pyx_v_headers
относится к типу char **
, а недостатком является то, что print(headers)
больше не работает из коробки.