Как сравнить атрибуты объекта Python с помощью Cython? - PullRequest
0 голосов
/ 21 мая 2019

Я пытаюсь ускорить одну функцию 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

...