いくつかのラムダ関数を辞書に入れるこのpythonコードがあります:
dictfun = dict()
for txt in ("a", "b", "c"):
dictfun[txt] = lambda: "function " + txt
これらの関数は、呼び出された引数を含む文字列を返すだけです。for 、forなど
の出力が表示されることを期待していましたが、次のようになります。function a
dictfun["a"]()
function b
dictfun["b"]()
>>> dictfun["a"]()
'function c'
>>> dictfun["b"]()
'function c'
>>> dictfun["c"]()
'function c'
それらはすべてtxt
、設定された最後の値、つまり現在の値に評価されるようです。つまり、変数はラムダに閉じられていません。私もこれを行うことができます:
>>> txt = "a"
>>> dictfun["c"]()
'function a'
txt
期待される出力を得るためにラムダ関数に近づくにはどうすればよいですか?