如果值匹配,我创建了一个单行程序来将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
循环构建字典,但我想要一个单行表达式。
任何人都可以解释为什么这种方法失败以及我是如何做到的?
答案 0 :(得分:4)
您需要为每个lambda捕获i
的当前值,这可以通过默认参数i=i
来完成。参见:
>>> d = { str(i): lambda v, i=i: v == i for i in range(3) }
>>> d['0'](0)
True
>>> d['0'](2)
False
答案 1 :(得分:0)
只是另一种更符合逻辑的方法
d=dict((str(i),lambda v, i=i: v==i ) for i in range(3))
这将给出与上面相同的结果