2013-04-30 [長年日記]

いまのいままで、and or イディオムの使いかたを間違えてた

シェルスクリプトとかで条件分岐を短く書くことができるので、よくこんな書き方をしていた:

$ if 条件 ; then
>   真の場合の処理
> else
>   偽の場合の処理
> fi
↑ を and/or イディオムを使って ↓
$ 条件 && 真の場合の処理 || 偽の場合の処理
同様に、CやJavaでも、値の代入で使える三項演算子がなかなか便利で、こんな感じで使う;
変数 = 条件 ? 真の場合の値 : 偽の場合の値
Switch Case もこんな書き方にできる;
変数 = 条件1 ? 条件1成立時の値 : \
       条件2 ? 条件2成立時の値 : \
       条件3 ? 条件3成立時の値 : どれも成立しなかった時の値
で、Pythonを使い始めてから、この記法が使えなくて不便だなーと思っていた*1のだが、いろんなソースを読んでてて、こんな書き方を見つけたので真似してた:
変数 = 条件 and 真の場合の値 or 偽の場合の値
だけど、この書き方は「真の場合の値」が偽である場合に、「偽の場合の値」を返す、という挙動をする。これを知らなくてバグを作りこんでしまっていた。

*1 Python 2.5以降なら 変数 = 真の場合の値 if 条件 else 偽の場合の値 という記法が使えるようだが、当時使っていたのは Python 2.4 だった。

正しい and or イディオム

Wikipediaによれば、こう書くのがいいらしい;

変数 = (条件 and [真の場合の値] or [偽の場合の値])[0]

いままでのコードを一通り見直さないといけないや。

«前の日記(2013-01-08) 最新