2012年9月26日

Python に switch-case なんてありません

概要

人にPython教えると switch-case に関してたまに聞かれるのでメモしておく。

ドキュメント

Python で switch-case がない理由は以下のドキュメントにまとまっている。

端的な理由は、switch-caseは綺麗に書けないし、そんなに必要ない、というのが理由。

ではどう書くか

簡単に書く場合は「if-elif-else」で書くか「辞書」で書くのが多い。
以下、とりあえずサンプル。実際にこういう分岐が必要な場合は、もっとオブジェクト指向的に適切な方法を選択するので、あまりこういう記述が出てくるような気がしない。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import unittest


class TestSwitch(unittest.TestCase):

    def test_if(self):
        """if での複数条件分岐"""
        key = 'a'
        if key == 'a':
            print 'a'
            self.assertEqual('a', key)
        elif key == 'b':
            print 'b'
            self.assertEqual('b', key)
        else:
            print 'other'
            self.assertNotIn(('a', 'b'), (key,))

    def test_dict(self):
        """dict での複数条件分岐"""
        key = 'a'

        def key_a(key):
            print 'a'
            self.assertEqual('a', key)

        def key_b(key):
            print 'b'
            self.assertEqual('b', key)

        def key_other(key):
            print 'other'
            self.assertNotIn(('a', 'b'), (key,))

        key_dict = {
            'a': key_a,
            'b': key_b
        }

        key_dict.get(key, key_other)(key)

if __name__ == '__main__':
    unittest.main()

まとめ

どう思うかは好みなので、Pythonはこうだ言うことです。

blog comments powered by Disqus