有没有办法修改闭包内部变量之一的绑定值?查看示例以更好地理解它。
def foo():
var_a = 2
var_b = 3
def _closure(x):
return var_a + var_b + x
return _closure
localClosure = foo()
# Local closure is now "return 2 + 3 + x"
a = localClosure(1) # 2 + 3 + 1 == 6
# DO SOME MAGIC HERE TO TURN "var_a" of the closure into 0
# ...but what magic? Is this even possible?
# Local closure is now "return 0 + 3 + x"
b = localClosure(1) # 0 + 3 +1 == 4
我认为在Python中没有任何方法可以做到这一点。定义闭包后,将捕获封闭范围内变量的当前状态,并且不再具有可直接引用的名称(从闭包外部)。如果要foo()
再次调用,新的闭包将具有与封闭范围不同的变量集。
在简单的示例中,使用类可能会更好:
class foo:
def __init__(self):
self.var_a = 2
self.var_b = 3
def __call__(self, x):
return self.var_a + self.var_b + x
localClosure = foo()
# Local closure is now "return 2 + 3 + x"
a = localClosure(1) # 2 + 3 + 1 == 6
# DO SOME MAGIC HERE TO TURN "var_a" of the closure into 0
# ...but what magic? Is this even possible?
localClosure.var_a = 0
# Local closure is now "return 0 + 3 + x"
b = localClosure(1) # 0 + 3 +1 == 4
如果您确实使用了这种技术,我将不再使用该名称,localClosure
因为它实际上不再是一个闭包。但是,它的工作原理与以前相同。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句