andとor
よく文法の説明には、andとorの論理演算子はこんな感じに書かれています。
真 and 真 -> 真 真 and 偽 -> 偽 偽 and 真 -> 偽 偽 and 偽 -> 偽 真 or 真 -> 真 真 or 偽 -> 真 偽 or 真 -> 真 偽 or 偽 -> 偽
ただこれは、ブーリアン代数のandとorの説明であれば合っているのですが、Pythonの論理演算子andとorの説明としては少し間違っています。
and演算子というのは、左辺が偽のとき右辺は(真か偽か分からなくてもよいので)実行しません。同様にor演算子も、左辺が真のとき右辺は実行しません。
さらに、andもorも実行された値をそのまま返します。TrueやFalseを返すわけではありません(TrueやFalseを返すのは比較演算子です)。
つまり、実際にはこんな感じです。
x【真】 and y -> y x【偽】 and ... -> x x【真】 or ... -> x x【偽】 or y -> y
このような性質があるからこそ、三項演算子のような使い方ができることになります。
x == 0 and float('inf') or 1 / x # True and float('inf') -> float('inf') # float('inf') or ... -> float('inf') # False and ... -> False # False or 1 / x -> 1 / x