【发布时间】:2019-02-20 20:38:49
【问题描述】:
假设我有一些函数fun,它的实际代码体是我无法控制的。我可以创建一个新函数,在调用fun 之前进行一些预处理,即
def process(x):
x += 1
return fun(x)
如果我现在希望 process 代替 fun 用于将来对 fun 的所有调用,我需要执行类似的操作
# Does not work
fun = process
但这不起作用,因为这会产生循环引用问题,因为现在 fun 是从 fun 的主体中调用的。我发现的一种解决方案是在process 中引用fun 的副本,如下所示:
# Works
import copy
fun_cp = copy.copy(fun)
def process(x):
x += 1
return fun_cp(x)
fun = process
但是这个解决方案让我很困扰,因为我真的不知道 Python 如何构造函数的副本。我想我的问题与使用继承和super 函数扩展类方法的问题相同,但这里我没有类。
我怎样才能正确地做到这一点?我认为这是一项足够普遍的任务,应该存在一些或多或少惯用的解决方案,但我没有找到它。
【问题讨论】:
标签: python python-3.x function reference functional-programming