Python: 関数ポインタの渡し方(汎用ハンドラの作成法)

2010年2月14日

C言語では関数ポインタと引数を渡してコールバック関数を実現するなんてことが よくありますよね。Pythonでもそれが可能で、要は可変個の引数の渡し方さえ 分かってしまえば簡単に実現可能です。
1
2
def handler( func, *args ):
  return func(*args)

上記のように、関数ポインタは関数名をそのまま記述すればよいです。 引数は、アスタリスクを変数名の先頭につければ、それが可変長リストの 扱いになり、funcの引数として扱われます。


上記のように定義したハンドラを使って、以下異なる2つの関数をハンドラに登録してみます。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
def printhoge(istr):
    print "hoge is %s" % istr

def printhogehoge(istr1, istr2):
    print "hoge is %s and %s" % ( istr1, istr2 )


if ( __name__ == "__main__" ):
    handler( printhoge, "hage" )
    handler( printhogehoge, "hage", "huga" )

この技術をベースにすると、いろんなコールバック方式の関数処理が実現できて便利ですよ。