Чем and/or отличаются от & и | в Python?
Запутался: где-то пишут if a and b, а где-то a & b. Это одно и то же или нет? Когда что использовать?
3 ответа
Это разные вещи.
and / or — логические операторы, работают с истинностью значений и используют короткое замыкание (если левая часть уже всё решает, правую не вычисляют). Именно их пишут в if.
& / | — побитовые, работают с битами целых чисел: 6 & 3 → 2, 4 | 1 → 5. Для bool они тоже работают (True & False), но без короткого замыкания и с другим приоритетом.
Правило простое: в условиях всегда and/or. &/| — когда реально нужна работа с битами (или с множествами/масками в pandas).
Разные.
Ещё важный момент: a and b возвращает не обязательно True/False, а само значение операнда. 1 and 2 даёт 2, 0 or 'x' даёт 'x'. На этом построен трюк со значением по умолчанию.