lambda
您代码中的主体引用了名称x
。与该名称关联的值在循环的下一次迭代中更改,因此,当调用lambda并解析名称时,它将获得新值。
为了获得预期的结果x
,请将循环中的值绑定到的参数,lambda
然后引用该参数,如下所示:
def main():
d = {}
for x in [1,2]:
d[x] = lambda x=x: print(x)
d[1]()
d[2]()
if __name__ == '__main__':
main()
>>>
1
2