具有内联函数的字典理解

时间:2015-07-15 04:40:05

标签: python dictionary lambda

我需要将函数存储在字典中,每个函数都取决于它的键,比方说,对于一个键1,关联的lambda函数是lambda s: s * A[1]。我尝试使用dict理解,但似乎内联函数的末尾是用循环的最后一个值定义的。

d = {k, lambda s: s * A[k] for k in range(n)}  # e.g. n = 4

之后,创建的所有lambda函数都使用A[3]而不是A[0], A[1], A[2]A[3]声明。这段代码出了什么问题?

1 个答案:

答案 0 :(得分:4)

出现问题,因为在执行lambda函数之前不会执行lambda函数的内容。

因此,每当您尝试调用lambda函数时,它都会处理k的最新值(如果您执行del k并尝试调用lambda函数,则会出现错误)。< / p>

@ YS-L的答案应该对你有好处。

另一种方法是将字典的值设为绑定方法,绑定k的值。示例 -

>>> d = {k:(lambda k,s: s * A[k]).__get__(k) for k in range(n)}
>>> d
{0: <bound method int.<lambda> of 0>, 1: <bound method int.<lambda> of 1>, 2: <bound method int.<lambda> of 2>, 3: <bound method int.<lambda> of 3>}
>>> A
[1, 2, 3, 4]
>>> d[0](1)
1
>>> d[1](1)
2
>>> d[2](1)
3
>>> d[3](1)
4