Однострочное выражение if-then-else
У меня есть вопрос о том, как записать конструкцию if-then-else
на одном ряду в Python. Я хочу, чтобы код выполнял логику, похожую на следующую:
if count == N:
count = 0
else:
count = N + 1
В Objective-C я бы записал это так:
count = count == N ? 0 : count + 1;
Как я могу сделать то же самое в Python, чтобы вся конструкция помещалась в одну строку?
4 ответ(ов)
Кроме того, вы всё еще можете использовать "обычный" синтаксис if
и объединить его в одну строку с помощью двоеточия.
if i > 3: print("Мы закончили.")
или
field_plural = None
if field_plural is not None: print("insert into testtable(plural) '{0}'".format(field_plural))
Выражение count = 0 if count == N else N + 1
использует тернарный оператор для присвоения значения переменной count
. Если count
равно N
, то count
будет равно 0; в противном случае — N + 1
.
Тем не менее, следует отметить, что ваш вариант может быть более читаемым и понятным для других разработчиков. Использование тернарного оператора иногда делает код менее очевидным, особенно для тех, кто не так хорошо знаком с его синтаксисом.
В общем виде синтаксис тернарного оператора выглядит следующим образом:
value_true if <test> else value_false
Существует и другой способ записи:
[value_false, value_true][<test>]
Например, так:
count = [0, N+1][count == N]
Этот способ вычисляет обе ветки перед тем, как выбрать одну из них. Чтобы вычислять только ту ветку, которая была выбрана, можно использовать:
[lambda: value_false, lambda: value_true][<test>]()
Например:
count = [lambda: 0, lambda: N + 1][count == N]()
Этот подход позволяет избежать ненужных вычислений и вызывать только ту функцию, которая соответствует результату теста.
Ваш код может быть переведен на русский язык следующим образом:
count = 0 если count равно N иначе N + 1
Не забудьте учесть, что эта запись является аналогом тернарного оператора, который используется для условного присваивания значений в Python. В вашем примере, если count
равно N
, то его значение устанавливается в 0
, в противном случае оно будет равно N + 1
.
Стилизация многострочных условий в операторе 'if'? [закрыто]
Преимущественны ли двойные квадратные скобки [[ ]] над одинарными [ ] в Bash?
Сохранить график в файл изображения вместо его отображения
Как использовать десятичное значение шага в range()?
Как отсортировать список/кортеж списков/кортежей по элементу на заданном индексе