2

値が一致するかどうかをテストする関数に int の文字列をマップするワンライナーを作成しています。理想的には、結果ディクショナリはおよびのdように動作します。しかし、代わりに、次の出力が得られます。d['0'](0) is Trued['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行の式が必要です。

このアプローチが失敗する理由と、それを正しく行う方法を誰かが説明できますか?

4

2 に答える 2