Я прочитал ссылки ниже, но они не касаются моего вопроса.
Есть ли в Python тернарный условный оператор? (вопрос заключается в сжатии оператора if-else в одну строку)
Есть ли более простой способ написать оператор if-elif-else, чтобы он умещался в одной строке?
Например,
if expression1:
statement1
elif expression2:
statement2
else:
statement3
Или реальный пример:
if i > 100:
x = 2
elif i < 100:
x = 1
else:
x = 0
Я просто чувствую, что если бы приведенный выше пример можно было бы написать следующим образом, он мог бы выглядеть более кратким.
x=2 if i>100 elif i<100 1 else 0 [WRONG]
источник
a = 1 if i < 100 else (2 if i > 100 else 0)
(Не проверено, но я думаю, что он должен работать)Если вам нужны разные выражения только для разных случаев, это может сработать для вас:
Например:
источник
"pos"
это не утверждение, это выражение.Просто вложите еще одно предложение if в оператор else. Но это не делает его красивее.
источник
Несмотря на некоторые другие ответы: ДА, это возможно :
переводится в следующий лайнер:
на самом деле вы можете вкладывать их до бесконечности. Наслаждаться ;)
источник
При желании вы можете использовать
get
методdict
:Вам не нужен
get
метод, если один из ключей гарантированно оцениваетTrue
:В идеале должен оцениваться не более одного ключа
True
. Если оценивается более чем один ключTrue
, результаты могут показаться непредсказуемыми.источник
Есть альтернатива, которая, на мой взгляд, совершенно нечитаема, но я все равно поделюсь ей из любопытства:
Подробнее здесь: https://docs.python.org/3/library/stdtypes.html#boolean-operations-and-or-not
источник
Если вы хотите использовать вышеупомянутый код в одной строке, вы можете использовать следующее:
При этом x будет присвоено 2, если i> 100, 1, если i <100 и 0, если i = 100
источник
Это также зависит от характера ваших выражений лица. Общий совет по другим ответам «не делать этого» вполне применим для общих операторов и общих выражений.
Но если все, что вам нужно, это таблица «отправки», например, вызов другой функции в зависимости от значения данной опции, вы можете поместить функции для вызова в словарь.
Что-то вроде:
Вместо if-else:
источник
Люди уже упоминали троичные выражения. Иногда с помощью простого условного присваивания в качестве примера можно использовать математическое выражение для выполнения условного присваивания. Это может сделать ваш код не очень удобочитаемым, но он займет одну довольно короткую строку. Ваш пример можно было бы записать так:
Сравнение будет True или False, а при умножении на числа будет либо 1, либо 0. Можно использовать + вместо | посередине.
источник
Троичный оператор является лучшим способом выражения кратким. Синтаксис такой
variable = value_1 if condition else value_2
. Итак, для вашего примера вы должны дважды применить тернарный оператор:источник
Вы можете использовать вложенные тернарные операторы if.
источник