Я изучаю питон, используя отличную книгу Марка Лутца. Я сталкиваюсь с этим утверждением, что троичный оператор в Python, который фактически таков:
if a:
b
else:
c
можно записать двумя способами:
b if a else c
: использование нормального троичного синтаксиса python и
((a and b) or c)
: с использованием эквивалентной, но более хитрой and/or
комбинации
Меня смущает второе представление, поскольку оно не соответствует моему инстинкту. Я попробовал эти 2 синтаксиса в интерактивной подсказке и нашел разные ответы для особого случая b = 0.
(предположим, b = 0, a = 4, c = 20)
0 if 4 else 20
выходы 0
((4 and 0) or 20)
выходы 20
Похоже, что 2 выражения являются эквивалентами для всех truthy
значений b
, но не эквивалентны для всех falsy
значений b
.
Я хочу знать, есть ли здесь что-то, чего мне не хватает. Мой анализ неверен? Почему в книге говорится, что эти два случая эквивалентны. Пожалуйста, просветите мой грубый ум. Я новичок в Python. Заранее спасибо.