python 通过引用复制函数

python copy function by reference

我的问题是关于通过引用复制的函数回调

func1 = lambda a, b : a+b
func2 = lambda a, b : a*b
ref = func1
ref_ref = ref
ref = func2
print(ref_ref(3,5)) # it returns 8, not 15

我想通过引用调用函数(这样结果 returns 15)但是它不起作用。

我怎样才能得到这个?

从您的变量命名来看,您的预期很明显,但这不是 python 中赋值的工作方式。在赋值给 ref_ref 之后,所有变量 func1refref_ref 实际上是完全等价的。 ref_ref 不是对 ref 的引用,而是直接引用同一个函数对象,func1ref 也引用。这里不涉及递归引用。

如果你想在你的代码中实现你期望的功能,你实际上需要一个对象,它可以延迟解析一个变量名。所以你可以做

func1 = lambda a, b : a+b
func2 = lambda a, b : a*b
ref = func1
ref_ref = lambda : ref
ref = func2
print(ref_ref()(3,5)) # it returns 15