考虑这个(相当无意义的)javascript代码:
function make_closure() {
var x = 123, y = 456;
return function(varname) { return eval(varname) }
}
closure = make_closure()
closure("x") // 123
closure("y") // 456
从返回的函数make_closure
不包含对范围变量的任何引用,但在调用时仍然能够返回它们的值。
有没有办法在 python 中做同样的事情?
def make_closure():
x = 123
return lambda varname: ...no "x" here...
closure = make_closure()
print closure("x") # 123
换句话说,如何编写一个闭包来“知道”定义范围中的变量而不明确提及它们?