読者です 読者をやめる 読者になる 読者になる

Python 辞書の可能性

Programming/Python
今日シミュレーションが終わるのを待っている間、Pythonのドキュメントを眺めていたら発見。
Python に switch や case 文がないのはなぜですか? 

ここで紹介されている、辞書を使って分岐させる方法がすごくいい。Switch文では、実際条件-処理-条件-処理というふうに書いていくので、結局そんなに可読性があがるわけでもなく大して意味もないなと(Javaのおべんきょーをしているときは)思ってたんだけれども、この辞書に条件に応じて関数を呼び出せるようにする仕組みは条件の記述がひとところにまとまっているのでとてもわかりやすい。
各条件に対する処理の細かい内容まではわからないけれども、とにかくこの条件の時はこれが呼び出されるんだな、というのが一目でわかる。

ドキュメントには
非常に大きな数の選択肢から選ぶとき、値を呼び出す関数に対応づける辞書を作れます。
と書いてあるけれども、少数でも積極的に使っていくべきだと思う。if..elif...elseでやるよりも、のちのち条件を追加するときの見通しがつきやすいと思う。

もう早速まわしてたプログラムでの条件分岐をこの方式に直した。

未来世紀ブラジル空飛ぶモンティ・パイソンと関係があったり



また、ある処理の戻り値に応じて処理をかえたいときがある。戻り値が0のときはこう、1のときはこう、という風に。
さらに、戻り値が0と1のときは単にそのまま引数の必要ない関数(メソッド)を実行するけども戻り値が2のときはその戻り値と一緒に別の値を渡してそれを引数にした関数を実行する、みたいな処理をしたいときが出てきた。

こういうときも辞書を使う。
戻り値を{'status': 0}とか{'status:' 1}、{'status': 2, 'data': 'abcde'}のような形にしておけば、先ほどの辞書を使った分岐を使って
fdict = {0: function0, 1: function1, 2: function2}
fdict[modorichi['status']]()
とかしておいて、function2の中で戻り値の'data'を呼び出すみたいな感じ。

このほかにもいろいろと面白そうな記事があるので、暇な時は目をとおしてみよう。