我努力让lambdas工作.这里的代码是示例,但它很好地显示了我的问题.
lambdas = list()
for i in range(5):
lambdas.append(lambda x:i*i*x)
print lambdas[0](1)
print lambdas[2](1)
Run Code Online (Sandbox Code Playgroud)
这给了我16,但我希望不同的lambda有不同的价值.为什么会这样!
在这段代码中:
for i in range(5):
lambdas.append(lambda x:i*i*x)
Run Code Online (Sandbox Code Playgroud)
运行i该函数时确定值.定义函数的时间值丢失.i
改为使用:
lambdas = list()
for i in range(5):
lambdas.append(lambda x, i=i : i*i*x)
print lambdas[0](1)
print lambdas[2](1)
Run Code Online (Sandbox Code Playgroud)
这会产生:
0
4
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为作为一种特殊情况,函数的默认参数(i=i如上所述)会立即绑定.
i是 4你的循环结束所以i每个是4 lambda.
如果你i在循环外面打印,你会看到它是4:
for i in range(5):
lambdas.append(lambda x: i * i * x)
print(i)
4
Run Code Online (Sandbox Code Playgroud)
您正在使用一个在整个循环中更新的变量,如果您在循环内调用lambda,您将得到您期望的结果.
for i in range(5):
lambdas.append(lambda x: i * i * x)
print(lambda x: i * i * x)(1)
0
1
4
9
16
Run Code Online (Sandbox Code Playgroud)
行为就是你所期望的,i就像任何其他变量一样.
在旁注中,您可以使用list comp来创建列表:
lambdas = [lambda x,i=i: i * i * x for i in xrange(5)]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
85 次 |
| 最近记录: |