再帰呼び出しを含めて、再帰関数をラップするにはどうすればよいですか?たとえば、given foo
and wrap
:
def foo(x):
return foo(x - 1) if x > 0 else 1
def wrap(f):
def wrapped(*args, **kwargs):
print "f was called"
return f(*args, **kwargs)
return wrapped
wrap(foo)(x)
"f was called"
最初の呼び出しでのみ出力されます。再帰呼び出しは引き続きアドレスしますfoo()
。
モンキーパッチを当てたり、内部を突いたりしてもかまいません。このコードを次の核弾頭処理プログラムに追加する予定はないので、たとえそれが悪い考えであっても、その効果を達成したいと思います。
編集:たとえば、パッチを適用して機能foo.func_globals
をオーバーライドしますfoo.__name__
か?それが常にある場合、私が気にかけるべき副作用はありますか?