标签: python
最近,我发现将列表推导与lambda函数结合使用时会发生一件有趣的事情。
示例代码:
def multipliers(): return [lambda x: i*x for i in range(5)] m = multipliers() for i in m: print(i(2))
您希望它打印出0、2、4、6、8,但是它却打印出8,8、8、8、8。
我认为这与延迟评估有关,但是我不确定,并且对其进行调试并没有使其更加清晰。谁能解释为什么会这样?