日別アーカイブ: 2022/05/18

Python switch (match)

Python コードを書いていて文字列前後の空白を削除する必要があった。
うっかり trim() と書いたんですけど、こんな例外が。

trim

教えてくれてありがとう、Python では strip() でしたね。
いやぁ筆者を含めて Javascript と混同する人が多いんだろうな。
てかいつのまにこんな親切な例外表示になったんだ?

What’s New In Python 3.10 ? Python 3.10.4 ドキュメント

特に記述は無いけど Better error messages の一つかな。

そんなこんなで上記ページを初めて見たんですけど。
あら Python にもとうとう switch 文が、いや match ですけど。
と思ったんですけど何か変。

break いらないの?

#!/usr/bin/gjs

function func(num) {
    switch(num) {
        case 1:
            print('one');
            //break;
        case 1:
            print('once again');
            //break;
        default:
            print('default!');
    }
}

func(1);

/* output
one
once again
default!
*/

switch 文だとこうなる、C 言語等も同様。

#!/usr/bin/env python3

def func(num):
    match num:
        case 1:
            print('one')
        case 1:
            print('nce again')
        case _:
            print('default!')

func(1)

''' output
one
'''

なるほど、だから switch ではなく match か。

というかコレ if-elif-else の別表記でしかないんだな。
以上とか未満みたいな case はできないみたいだし使い所は微妙。
読みやすくなるかわりに階層が深くなるデメリットも。

でも一番問題なのは。。。。。
Gedit や gnome-text-editor で現状では強調表示されないことかも。

# Gedit
/usr/share/gtksourceview-4/language-specs/python3.lang

# gnome-text-editor
/usr/share/gtksourceview-5/language-specs/python3.lang

に自分で追記すればイケるはず、必要ならばだけど。
4 が GTK3 で 5 が GTK4 なのよ、バージョンがややこしくなったもんだ。