関数呼び出しのフック

デコレータ構文を使った関数呼び出しのフック

# dec.py
def hook(func):
    def wrap(*arg, **kwargs):
        print "call ", func.func_name, "(%s, %s)" % (arg,kwargs)
        return func(*arg, **kwargs)
    return wrap

@hook
def f(x):
    return x * 2
@hook
def g(x):
    return x + 1

print g(f(10))

実行結果

$ py dec.py
call  f ((10,), {})
call  g ((20,), {})
21

デコレータ面白いなー