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 に定数は無い、定数に見えるような書き方をしてるだけ、ではあろうけど。
[ ツッコむ ]
以上です。