Могу ли я использовать следующее в качестве альтернативы условному оператору в Python? - PullRequest
0 голосов
/ 20 октября 2018

Я обнаружил, что следующий код работает как условный оператор в Python.

num1 = condition and val1 or val2

Могу ли я использовать его вместо следующего?

num1 = val1 if condition else val2

Ответы [ 3 ]

0 голосов
/ 20 октября 2018

Нет, ты не можешь.Это не будет работать правильно, если val1 равно ложь :

>>> 0 if True else 1
0
>>> True and 0 or 1
1
0 голосов
/ 20 октября 2018

Первый код, который вы предлагаете, не всегда ведет себя как второй, поскольку здесь встречный пример, где condition - это истина, val1 - это 0, а val2 - это 2

num1 = True and 0 or 2

num1 равно 2 после присваивания, потому что 0 оценивается как ложное в контексте логического выражения.Во втором коде результат будет 0 вместо.

0 голосов
/ 20 октября 2018

Я бы посоветовал вам против этого по двум причинам.

  1. Если условное утверждение четко выражает ваше намерение, что способствует удобочитаемости вашего кода.
  2. Такое поведение может быть непоследовательнымв разных версиях Python (прошлых или будущих), и вы рискуете нарушить ваш код очень тонкими способами, если будете использовать это.
...