У меня есть функция Cython, которая требует создания кортежа, который будет использоваться в качестве ключа словаря. Чтобы ускорить процесс, я бы хотел, чтобы этот кортеж был ctuple
таким, чтобы я мог воспользоваться преимуществами использования Cython. Без этого нет никакого смысла пытаться использовать Cython для этой функции вообще, так как я переписываю медленную функцию из ранее существующего пакета Python.
Я знаю тип значений кортежа:
cdef func(int size):
cdef (int, int) dict_key
...
Проблема в том, что длина кортежа не определяется во время компиляции. Параметр size
, передаваемый в функцию, будет определять длину кортежа - если size
равен 3, тогда кортеж будет содержать 3 значения.
Это не проблема, если я просто объявляю cdef vector[int] dict_key
. Но я не могу этого сделать - это будет использоваться в качестве ключа словаря и, следовательно, должно быть хешируемым. Список не.
Что я могу сделать здесь? Как я могу объявить кортеж известной, но переменной длины, или, альтернативно, как я могу использовать vector
в качестве ключа словаря?
Или, альтернативно, альтернативно, есть ли какой-нибудь способ проверить ограниченностьнабор size
значений и выставить соответствующие cdef
s? Я бы действительно предпочел этого не делать. C