@danyaxaxaxaxa

Как упростить однострочный if?

Опять же пытаюсь научиться писать код чище. Как можно упростить этот кусок кода?

if int(conversation_id) != event.object['message']['peer_id'] - 2000000000:
     continue
  • Вопрос задан
  • 189 просмотров
Решения вопроса 1
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
CONVERSATION2PEER_GAP = 2_000_000_000
conversation_id = int(conversation_id)  # Почему у вас где-то идентификаторы хранятся интом,
# а где-то текстом? Нужно стремиться к стандартизации и избегать таких неконсистентных нюансов.
# Если там не может быть другого текста, то следует приводить к числу сразу когда возможно.
peer_id = event.object['message']['peer_id']
if peer_id != conversation_id + CONVERSATION2PEER_GAP:
     continue
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
lxstvayne
@lxstvayne
Люблю Python
Можно попробовать написать для себя такой код, мне кажется читается проще:
import enum


class SenderType(enum.Enum):
    FROM_USER = enum.auto()
    FROM_CHAT = enum.auto()
    FROM_GROUP = enum.auto()


def get_sender_type(peer_id: int) -> SenderType:
    SHIFT_VALUE = 2_000_000_000

    if peer_id > SHIFT_VALUE:
        return SenderType.FROM_CHAT
    elif 0 < peer_id < SHIFT_VALUE:
        return SenderType.FROM_USER
    else:
        return SenderType.FROM_GROUP


if __name__ == '__main__':
    test_id = 345343111

    if get_sender_type(test_id) == SenderType.FROM_USER:
        print('Работает)')
Ответ написан
Комментировать
@U235U235
Не сильно проще, но как вариант:
if sum((int(conversation_id), -event.object['message']['peer_id'], 2e9)):
    continue
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы