Мое предыдущее использование выражений if было довольно простым, поэтому я принял это как должное и с пониманием, что только логическое True приведет к вводу оператора if. То, что составляет логическое Истина, не было так очевидно для меня после столкновения с этим утверждением if. Это, безусловно, очевидно для тех, кто имеет опыт работы с compsci, но я никогда не задумывался над тем, как операторы определяют, является ли аргумент логическим значением True или нет. Например, если (5> 2) -> True просто имеет смысл для любого, имеющего хотя бы начальное образование по математике, так что я воспринял это как должное. Напротив, если (2) -> True, не кажется слишком очевидным для специалиста, не являющегося специалистом в области компьютерных технологий.
Например
>>>2 & 2
2
>>> 2 == True
False
>>>if (2):
... print("true")
true
Почему оператор if был введен несмотря на то, что 2 и 2 оцениваются как значение int, равное 2? Почему оператор if был введен, если ему присвоено значение int 2, хотя само 2 не == True? Это был первый раз, когда я увидел такой тип поведения, и он заставил меня понять из различных других вопросов переполнения стека, что оператор if не оценивает значение int из 2 == True, но вместо этого оценивает bool (2) == True , что на самом деле верно.
Опять же, если вы пришли из компьютерной науки, я уверен, что все это очень очевидно, но даже идея bool (2) и «проверки на истинность» как фразы была для меня новой, так что добавление этого на двоичные логические операторы сначала вызвали у меня немного путаницы. Например:
>>>2 & 4
0
>>>if (2 & 4):
... print("true")
>>>bin(2 & 4)
'0b0'
>>>if ('0b0'):
... print("true")
true
>>>if (0b0):
... print("true")
>>>bool(0)
False
>>>bool(0b0)
False
>>>bool(b'0')
True
>>>bool(bin(0))
True
Во-первых, с ошибочным пониманием того, что операторы if оценивали аргумент == True, приведенные выше примеры казались довольно нелогичными, так как я думал, что двоичный 1 должен приводить к True, а двоичный 0 должен приводить к False. Я понятия не имел, почему целочисленные значения выше 1, в int или двоичной форме должны возвращать True.
После прочтения документации по Python для Проверка истинности значения Я вижу несколько примеров объектов, которые считаются ложными. Здесь, и довольно очевидно, имеет смысл, почему bool (0) и bool (0b0) возвращают False. И наоборот, для bool (b'0 ') и bool (bin (0)), где это, похоже, возвращает True. Почему это? Поскольку bin () возвращает string представление числа, так как b'0 '(строка) не является действительным двоичным значением (например, 0b0), и поскольку эти строки не являются пустыми строками, а, скорее, заполнены символами, представляющими ноль, он оценивается как Истина (см. третий пункт в Проверка значения истины ).
Я привел несколько примеров неочевидных (для меня) тестов для оценки истины, и почему они действительно имеют логический смысл. Надеюсь, что это помогает другим, которые могут быть озадачены кажущимся (для меня) меньшим общим использованием выражения if.