再帰呼び出しを含めて、再帰関数をラップするにはどうすればよいですか?たとえば、given fooand 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__か?それが常にある場合、私が気にかけるべき副作用はありますか?