Я пытаюсь ускорить одну функцию Python, которая сравнивает идентификаторы, хранящиеся в качестве значений атрибутов двух объектов. Так что мой класс хранит несколько значений и в остальном выглядит так:
class Event:
def __init__(self, id):
self.id = id
У меня есть словарь Dic_Storage
, в котором (room, period)
кортежей в качестве ключей и объектов из класса событий в качестве значений. Моя функция проверяет определенную комбинацию event, period
, есть ли уже запланированное событие с таким же идентификатором в любой из комнат:
def check_ids(event, period)
for room in Dic_Rooms:
if Dic_Storage[(room, period)].id == event.id:
return True
return False
Итак, я хотел попробовать использовать cython и объявить переменные заранее. event
- это объект Python, period
- целое число, room
- строка, а возвращаемое значение - логическое. Тем не менее, из четырех я мог найти только целое и логическое значение в документации по Cython: https://cython.readthedocs.io/en/latest/src/userguide/language_basics.html
Я наивно пытался что-то подобное безуспешно:
cpdef bint check_ids(struct event, int period)
for room in Dic_Rooms:
if Dic_Storage[(room, period)].id == event.id:
return True
return False
К сожалению, у меня нулевое знание. Можно ли даже сделать то, что я хочу сделать, как это? Или мне также нужно каким-то образом преобразовать мой класс событий в код C, чтобы эта функция принимала его в качестве аргумента? Поскольку я обращаюсь к этим объектам событий из нескольких модулей и функций в своем коде и предпочитаю сохранять их как объекты Python (также я не знаю, как правильно обращаться к ним, если они объявлены как код c). Эта функция вызывается очень часто, и я ищу способ уменьшить ее издержки.
С наилучшими пожеланиями,
Jan