Правила приоритета 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) никогда не оценивается.

Другие вопросы по тегам