Правила приоритета Python для логических операторов
Когда я оцениваю следующее выражение:
1 или (1/0) и 1
Какие правила (приоритет, оценка короткого замыкания и т. Д.) Соблюдаются, чтобы получить ответ
2 ответа
b or anything_else
определяется как возвращающий b, если b имеет значение true-ish, без оценки что-либо. Так как ваш первый 1 является истинным, ваш 1/0 никогда не будет оценен, следовательно, нет ошибки. Под "истиной" я подразумеваю любое значение, которое Python считает истинным, а не только True
логическое значение. Попробуйте выражение с True или [2] вместо первого 1, чтобы понять, что я имею в виду.
Короткое замыкание Python оценивает. В вашем примере выражение
1 or (1/0) and 1
заканчивает оценку на первом 1
и возвращается True
,
Более минимальный пример служит для иллюстрации оценки короткого замыкания в Python. Рассмотрим выражение:
(1/0) or 1
Это поднимает ZeroDivisionError
исключение при оценке (1/0)
, Но выражение:
1 or (1/0)
короткое замыкание оценивает True
, Никаких исключений не возникает, поскольку подвыражение (1/0)
никогда не оценивается.