我需要将函数存储在字典中,每个函数都取决于它的键,比方说,对于一个键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]
声明。这段代码出了什么问题?
答案 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