Согласно правилам короткого замыкания, каждый раз, когда у нас есть оператор True or ...
, он возвращает True независимо от остальной части оператора. например, даже если остальная часть инструкции выдает ошибку, она вернет True
. Аналогично, оператор False and ...
всегда возвращает False
. Я также нашел это объяснение онлайн, чтобы подвести итог.
Итак, когда я попытался запустить это:
a = False or (5>"hello")
print(a)
У меня было TypeError
, потому что ' > 'не поддерживается между str
и int
.
b = True or (5>"hello")
print(b)
Однако, этот вывод печатает True
и подтверждает правило короткого замыкания. Я сделал то же самое, подав заявку на False and ...
здесь:
c = False and (5>"hello")
print(c)
, и этот печатает False
, как и ожидалось.
Пока что мы продемонстрировали концепцию короткого замыкания. Но вот проблема:
d = False and False or True
print(d)
e = True or False and False
print(e)
Если вы запустите приведенный выше код, вы увидите, что d
и e
равны True
. Хотя у нас есть False and ...
оператор в начале для d
, кажется, что он выполняется весь оператор без короткого замыкания. Итак: Ложь и Ложь -> Ложь, Ложь или Правда -> Правда. Здесь я подумал: «Хм, хорошо. Может быть, это потому, что у меня было 3 логических значения». Но когда дело дошло до e, программа, кажется, имеет короткое замыкание, потому что если это не так, результатом должно быть: True или False -> True, True и False -> False.
Не могли бы вы объяснить, почему программа замыкается накоротко на e, а не на d?