【发布时间】:2021-05-31 12:15:03
【问题描述】:
我正在尝试执行一个相当简单的 lambda 函数来打印乘法表。
由于某些奇怪的原因,当我手动填充字典时,它可以工作。
lamdic = {
'x0': lambda num: num * 1,
'x1': lambda num: num * 2,
'x2': lambda num: num * 3,
'x3': lambda num: num * 4,
'x4': lambda num: num * 5,
'x5': lambda num: num * 6,
'x6': lambda num: num * 7,
'x7': lambda num: num * 8,
'x8': lambda num: num * 9,
'x9': lambda num: num * 10
}
但是,如果我尝试使用 for 循环来执行相同的操作 - 它不会。
for i, l in enumerate(vlst):
lamdic.update({l: lambda num: num * (i + 1)})
我已打印出字典项,它们似乎以相同的结构填充,但 for 循环无法正确打印。
完整代码:
vlst = ['x' + str(num) for num in range(10)]
lamdic = {}
for i, l in enumerate(vlst):
lamdic.update({l: lambda num: num * (i + 1)})
for v in vlst:
for i in range(1, len(vlst) + 1):
print(lamdic[v](i), end=' ')
print()
手动分配结果(预期):
1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
3 6 9 12 15 18 21 24 27 30
4 8 12 16 20 24 28 32 36 40
5 10 15 20 25 30 35 40 45 50
6 12 18 24 30 36 42 48 54 60
7 14 21 28 35 42 49 56 63 70
8 16 24 32 40 48 56 64 72 80
9 18 27 36 45 54 63 72 81 90
10 20 30 40 50 60 70 80 90 100
for循环赋值(意外):
2 6 12 20 30 42 56 72 90 110
2 6 12 20 30 42 56 72 90 110
2 6 12 20 30 42 56 72 90 110
2 6 12 20 30 42 56 72 90 110
2 6 12 20 30 42 56 72 90 110
2 6 12 20 30 42 56 72 90 110
2 6 12 20 30 42 56 72 90 110
2 6 12 20 30 42 56 72 90 110
2 6 12 20 30 42 56 72 90 110
2 6 12 20 30 42 56 72 90 110
为什么会有差异?为什么(基本上)做同样的事情会返回不同的结果?
【问题讨论】:
-
这能回答你的问题吗? Lambda in a loop
-
@mcsoini - 是的,确实如此!非常感谢!您发布的问题将我引向 Python 编程常见问题解答,它很好地解释了它。 docs.python.org/3/faq/…
标签: python python-3.x dictionary lambda