値が一致するかどうかをテストする関数に int の文字列をマップするワンライナーを作成しています。理想的には、結果ディクショナリはおよびのd
ように動作します。しかし、代わりに、次の出力が得られます。d['0'](0) is True
d['0'](1) is False
>>> d = { str(i): lambda v: v == i for i in range(3) }
>>> d['0'](0)
False
>>> d['0'](2)
True
その理由は遅延評価だと思います。ループを使用して辞書をfor
正しく作成できると思いますが、代わりに1行の式が必要です。
このアプローチが失敗する理由と、それを正しく行う方法を誰かが説明できますか?