【发布时间】:2012-05-13 18:37:25
【问题描述】:
如何包装递归函数,包括递归调用?例如,给定foo 和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__ 是否有效?如果总是这样,我应该注意什么副作用?
【问题讨论】:
标签: python higher-order-functions