индексирование в список
Использование
[expression_when_false, expression_when_true][condition] # or
(expression_when_false, expression_when_true)[condition]
использует тот факт, что в Python True равен (но не является!) 1, а False равен (но не!) 0. Вышеприведенное выражение создает список из двух элементов и использует результат условие для индексации в списке и возврата только одного выражения. Недостатком этого метода является то, что оба выражения оцениваются.
и / или ярлыки
С момента создания Python появилась форма этой операции:
condition and expression_when_true or expression_when_false
Это принимает ярлык и оценивает только одно выражение, но имеет подверженный ошибкам недостаток: expression_when_true не должно вычислять неверное значение, иначе результат будет expression_when_false . and
и or
являются «короткими замыканиями» в Python, и применяются следующие правила:
a and b #→ a if a is false, else b
a or b #→ a if a is true, else b
Если условие ложно, то expression_when_true никогда не оценивается, и в результате получается expression_when_false . OTOH, если условие истинно, то результатом является результат ( expression_when_true или expression_when_false ); обратитесь к таблице выше.
троичный условный оператор
Конечно, начиная с Python 2.5, существует троичный условный оператор:
expression_when_true if condition else expression_when_false
Странный (если вы привыкли к C-образному тройному условному оператору) порядок операндов приписывается многим вещам ; общее намерение состоит в том, что условие должно быть истинным большую часть времени, так что наиболее распространенный результат появляется первым и наиболее заметен.