可能重复:
在lambda表达式使用变量的值
我使用Python,并试图隔离一个问题,我与lambda函数。
从下面的代码我期待创造两个半波函数,每得到一个不同的x和输出应该是
1 2
但输出2 2
为什么? 我怎样才能使两种不同的功能? 使用高清?
def main():
d = {}
for x in [1,2]:
d[x] = lambda : print(x)
d[1]()
d[2]()
if __name__ == '__main__':
main()
在身体lambda
在代码中引用的名称x
。 与该名称关联的值改为在循环的下一次迭代,所以当拉姆达被调用,它解决它获得新值的名称。
为了达到预期中的结果,结合的值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
看起来像工作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()
这将解决这个问题。 这是因为X是直接绑定到拉姆达。
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()