初めてのPythonでよくわからないとこ
p.265に載っている以下のソース
>>> t, f = 1, 0 >>> x, y = 88, 99 >>> a = (t and x) or y >>> a 88 >>> a = (f and x) or y >>> a 99
ふむふむ。
これに以下の説明が続きます。
これで一応、問題はないのですが、このコードは「xが決してfalseになることはない」という保証がなければ使えません(xがfalseの場合、この式は常にyを返す)。よりifステートメントに近付けるには、戻り値にしたいオペランドを[]に入れ、決してfalseにならないようにする必要があります。
この説明がよくわからない。xがfalseだと何がマズイんだろう?yが返ってくるだけじゃないのか。
そして[]に入れたものが以下。
>>> ((t and [x]) or [y])[0] 88 >>> ((f and [x]) or [y])[0] 99 >>> (t and f) or y 99 >>> ((t and [f]) or [y])[0] 0
んん〜〜こんな書き方する意味は?試しにx = Falseと代入して比較してみた。
>>> x = False >>> ((t and [x]) or [y])[0] False >>> (t and x) or y 99 >>> ((f and [x]) or [y])[0] 99 >>> (f and x) or y 99
あああ、わかった!
よりifステートメントに近付けるには
という前提を忘れてた。
ifステートメントで書くと
>>> if t: x ... else: y ... False
こうなるもんね。この結果と等しくなるのは((t and [x]) or [y])[0]の方か。
ifステートメントで表した場合「もしtが真ならxを実行しなさい」という意味を持つから、実行するxがfalseだと条件として扱われてしまうと。