石油王研究課|CIFLAB

CIFLAB石油王研究課の活動ブログです。

辞書型の要素に関数をいれると便利だった

プログラミングをしているときに、たくさん条件分岐したいっていう時ないですか?僕はあります。

それで例えばこんな感じにifとelifで繋げるとするじゃないですか

def f_a():
    return 1
def f_b():
    return 2
def f_c():
    return 3
def f_d():
    return 4
def f_e():
    return 5
def f_f():
    return 6

tmp_str = 'a'

if tmp_str == 'a':
    print(f_a())
elif tmp_str == 'b':
    print(f_b())
elif tmp_str == 'c':
    print(f_c())
elif tmp_str == 'd':
    print(f_d())
elif tmp_str == 'f':
    print(f_f())

だらだらとしていて、見苦しいなーっと思いました。それでふと辞書にすればスッキリするんじゃないかと思って関数を要素にすればいいじゃんと気づきました。
関数ポインタを使ってこんな感じに書き直してみました。

def f_a():
    return 1
def f_b():
    return 2
def f_c():
    return 3
def f_d():
    return 4
def f_e():
    return 5
def f_f():
    return 6

tmp_str = 'a'
func_tmp = {'a':f_a, 'b':f_b, 'c':f_c, 'd':f_d, 'e':f_e, 'f':f_f}
print(func_tmp[tmp_str]())

結構スッキリした気がします。ただあまりこの書き方見ない気がするので、もしかすると良くないのかもしれない…そもそも凄い数の条件分岐がある時点でだめなんだろうなと思ったりした。