use*_*366 6 python lambda for-loop
可能重复:
使用lambda表达式中的变量值
我正在使用python并尝试隔离我使用lambda函数的问题.
从下面的代码我期望创建两个lambda函数,每个函数得到一个不同的x,输出应该是
1 2
但输出是2 2
为什么?我怎样才能创造两种不同的功能?使用def?
def main():
d = {}
for x in [1,2]:
d[x] = lambda : print(x)
d[1]()
d[2]()
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
app*_*tor 16
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
Run Code Online (Sandbox Code Playgroud)
这会修复它。这是因为 x 直接绑定到 lambda。
def create_lambda(x):
return lambda : print(x)
def main():
d = {}
for x in [1,2]:
d[x] = create_lambda(x)
d[1]()
d[2]()
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
看起来像是在工作partial
。
from functools import partial
def main():
d = {}
for x in [1,2]:
d[x] = partial(lambda x: print(x), x=x)
d[1]()
d[2]()
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)