Jof*_*sey 3 python lambda list-comprehension python-3.x
我正在使用list comprehension中的lambda函数,并发现了一些奇怪的行为
x = [(lambda x: i) for i in range(3)]
print(x[0](0)) #print 2 instead of 0
print(x[1](0)) #print 2 instead of 1
print(x[2](0)) #print 2
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么结果不是我所期望的吗?
lambda绑定变量本身,而不是它们拥有的值.在列表理解结束时i更改为2,因此所有lambdas i在此处引用,因此参考2.
为避免这种情况,您可以使用默认参数技巧:
[lambda x,i=i:i for i in range(3)]
Run Code Online (Sandbox Code Playgroud)
这将绑定i默认参数(在函数定义时计算)的值.
| 归档时间: |
|
| 查看次数: |
147 次 |
| 最近记录: |