Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用lambda表达式的词典理解无法产生预期结果_Python_Dictionary_Lambda_Closures_Dictionary Comprehension - Fatal编程技术网

Python 使用lambda表达式的词典理解无法产生预期结果

Python 使用lambda表达式的词典理解无法产生预期结果,python,dictionary,lambda,closures,dictionary-comprehension,Python,Dictionary,Lambda,Closures,Dictionary Comprehension,我正在创建一个单行程序来将int字符串映射到函数测试,如果值匹配。理想情况下,结果字典d的行为类似于d['0']0为真,d['0']1为假。但是,我得到了以下输出: >>> d = { str(i): lambda v: v == i for i in range(3) } >>> d['0'](0) False >>> d['0'](2) True 我在猜测懒惰的原因。我想我可以用for循环正确地构建字典,但是我想要一个单行表达式 有人能

我正在创建一个单行程序来将int字符串映射到函数测试,如果值匹配。理想情况下,结果字典d的行为类似于d['0']0为真,d['0']1为假。但是,我得到了以下输出:

>>> d = { str(i): lambda v: v == i for i in range(3) }
>>> d['0'](0)
False
>>> d['0'](2)
True
我在猜测懒惰的原因。我想我可以用for循环正确地构建字典,但是我想要一个单行表达式


有人能解释一下这种方法失败的原因以及我是如何做的吗?

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


这只是另一种更具逻辑性的方法。 d=dictstri,lambda v,i=i:v==i表示范围3中的i


这将得到与上面相同的结果

还可以看看:与惰性计算无关,只是函数名称空间在Python中的工作方式。正确的术语是后期绑定。当然,一个好的答案可以解决这个问题。
>>> d = { str(i): lambda v, i=i: v == i for i in range(3) }
>>> d['0'](0)
True
>>> d['0'](2)
False