2019/06/06(木) [n年前の日記]
#1 [python] Pythonで関数テーブルっぽいアレを書きたい
Pythonのスクリプト上で、関数テーブルっぽいものを書きたい。どうすればいいのやら。
ググってみて試してみたり。こうかな。
実行結果。
呼び出す際に、後ろに「()」をつければ関数として呼び出せる、のかもしれない。たぶん。
ググってみて試してみたり。こうかな。
def func1(): print("I am func1") def func2(): print("I am func2") def func3(): print("I am func3") tbl = { 0x01: func1, 0x02: func2, 0x03: func3, } for i in range(5): if i in tbl: tbl[i]() else: print(" %d is None" % i)
実行結果。
> python 01_def_call_test.py 0 is None I am func1 I am func2 I am func3 4 is None
呼び出す際に、後ろに「()」をつければ関数として呼び出せる、のかもしれない。たぶん。
◎ クラスの中で記述したい。 :
クラスの中で、定数として記述できるのか試したけれど、上手くいかない。
*1
結局、以下のように、初期化時に代入する感じに。
実行結果。
こういう書き方をするしかないのかな…。他に手はないものか。
結局、以下のように、初期化時に代入する感じに。
class DefCallTest(object): def __init__(self): self.tbl = { 0x01: self.func1, 0x02: self.func2, 0x03: self.func3, } def func1(self): print("I am func1") def func2(self): print("I am func2") def func3(self): print("I am func3") def main(self): for i in range(5): if i in self.tbl: self.tbl[i]() else: print(" %d is None" % i) c = DefCallTest() c.main()
実行結果。
> python 02_def_call_test_with_class.py 0 is None I am func1 I am func2 I am func3 4 is None
こういう書き方をするしかないのかな…。他に手はないものか。
◎ 2019/06/07追記。 :
クラス内でこの手のアレの書き方に関して、英語圏でもやり取りしてる例を見かけた。
_referencing class methods in class lists in Python - Stack Overflow
うーん。どれも、なにかこう…。
_referencing class methods in class lists in Python - Stack Overflow
うーん。どれも、なにかこう…。
*1: そもそも Python に定数は無い、定数に見えるような書き方をしてるだけ、ではあろうけど。
[ ツッコむ ]
以上です。