Булевы операторы Python возвращают последнее оцениваемое значение, а не True / False. docs имеют хорошее объяснение этого:
Выражение
blockquote>x and y
сначала оцениваетx
; еслиx
-false
, возвращается его значение; в противном случаеy
оценивается и возвращается полученное значение.