Как правильно сжать это утверждение Python IF? - PullRequest
1 голос
/ 02 октября 2019

Я довольно новичок в Python и пытаюсь найти лучший способ кодирования этого. Должен быть способ, но просто не уверен, как это сделать.

Два запроса по сути одинаковы, поэтому должен быть способ их уменьшить. Есть ли более эффективный способ сделать это?

        if set_date is not None:

            if is_rejected != 'true':
                query = query\
                    .filter(createddate__lte=set_date) \
                    .car_statuses(CarTow.TOWED) \
                    .order_by('-createddate')
            else:
                query = query\
                    .filter(createddate__lte=set_date) \
                    .car_statuses(CarTow.TOWED,CarTow.CONFIRMED) \
                    .order_by('-createddate')

            return query

Извините, если это простой вопрос, новичок здесь.

Ответы [ 3 ]

2 голосов
/ 02 октября 2019

Вы можете использовать троичную логику для добавления кортежей.

query = (
    query
    .filter(createddate__lte = set_date) 
    .car_statuses((CarTow.TOWED,) + ((CarTow.CONFIRMED,) if is_rejected == 'true' else ()) 
    .order_by('-createddate')
)
2 голосов
/ 02 октября 2019

Вы можете упростить этот процесс, выдвинув аргумент, который отличается от оператора if, и вывести общий текст за пределы.

if set_date is not None:
       if is_rejected != 'true':
             car_statuses = (CarTow.TOWED,)
       else:
             car_statuses = (CarTow.TOWED, CarTow.CONFIRMED)

       query = query\
           .filter(createddate__lte=set_date) \
           .car_statuses(*car_statuses) \
           .order_by('-createddate')
      return query
1 голос
/ 02 октября 2019

Возможно, вы захотите заменить это:

if set_date is not None:

на это:

if set_date:

Посмотрите, как Python оценивает условное условие if: Проверка значения истины (pydocs)

Вот большинство встроенных объектов, которые считаются ложными: константы, определенные как ложные: Нет и Ложь. ноль любого числового типа: 0, 0,0, 0j, десятичное число (0), дробь (0, 1) пустых последовательностей и коллекций: '', (), [], {}, set (), range (0)

Кроме того, «is» может давать странные результаты, это действительно для определения, ссылаются ли две метки на один и тот же объект или нет. Понимание Python's является оператором

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...