2

我正在创建一个单行来将 int 字符串映射到函数测试值是否匹配。理想情况下,结果字典的d行为类似于d['0'](0) is Trueand 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但我想要一个单行表达式。

谁能解释为什么这种方法会失败以及我是如何做对的?

4

2 回答 2

4

您需要捕获i每个 lambda 的当前值,这可以通过默认参数来完成i=i。看:

>>> d = { str(i): lambda v, i=i: v == i for i in range(3) }
>>> d['0'](0)
True
>>> d['0'](2)
False
于 2015-03-12T07:43:42.303 回答
0

只是一种更合乎逻辑地看待事物的替代方法。
d=dict((str(i),lambda v, i=i: v==i ) for i in range(3))

这将给出与上述相同的结果

于 2015-03-12T11:06:49.587 回答