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
之后,所有变量 func1
、ref
和 ref_ref
实际上是完全等价的。 ref_ref
不是对 ref
的引用,而是直接引用同一个函数对象,func1
和 ref
也引用。这里不涉及递归引用。
如果你想在你的代码中实现你期望的功能,你实际上需要一个对象,它可以延迟解析一个变量名。所以你可以做
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
我的问题是关于通过引用复制的函数回调
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
之后,所有变量 func1
、ref
和 ref_ref
实际上是完全等价的。 ref_ref
不是对 ref
的引用,而是直接引用同一个函数对象,func1
和 ref
也引用。这里不涉及递归引用。
如果你想在你的代码中实现你期望的功能,你实际上需要一个对象,它可以延迟解析一个变量名。所以你可以做
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