この(かなり無意味な)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
言い換えれば、スコープを定義する際に変数について明示的に言及せずに変数について「知っている」クロージャーを作成するにはどうすればよいでしょうか。