Сюда же интересная реализация or/and в Python:
def func(a, b):
print a or b
func(None, 'q')
func(123, 10)
func([1,2,3],'')
func('', {1: 5})
выдаёт:
q
123
[1, 2, 3]
{1: 5}
т.е. результат казалось бы булевых выражений на самом деле совсем не булевый, а равен последнему вхождению, по которому прекратилась обработка условия. Так, «1 and 5» будет «5».
Ну а если нужны именно булевые операции (или побитовые) — есть стандартные для Си &, | и ^.