考虑以下代码段:
# directorys == {'login': <object at ...>, 'home': <object at ...>}
for d in directorys:
self.command["cd " + d] = (lambda : self.root.change_directory(d))
Run Code Online (Sandbox Code Playgroud)
我希望创建一个包含两个函数的字典如下:
# Expected :
self.command == {
"cd login": lambda: self.root.change_directory("login"),
"cd home": lambda: self.root.change_directory("home")
}
Run Code Online (Sandbox Code Playgroud)
但看起来生成的两个lambda函数完全相同:
# Result :
self.command == {
"cd login": lambda: self.root.change_directory("login"),
"cd home": lambda: self.root.change_directory("login") # <- Why login ?
}
Run Code Online (Sandbox Code Playgroud)
我真的不明白为什么.你有什么建议吗 ?
a = [] a.append(lambda x:x**0)
a.append(lambda x:x**1)
a[0](2), a[1](2), a[2](2)... spits out 1, 2, 4, ...
b=[]
for i in range(4)
b.append(lambda x:x**i)
b[0](2), b[1](2), b[2](2)... spits out 8, 8, 8, ...
Run Code Online (Sandbox Code Playgroud)
在for循环中,i作为变量传递给lambda,所以当我调用它时,使用i的最后一个值代替运行的代码,就像使用[]一样.(即b [0]应使用x ^ 1,b [1]应使用x ^ 2,...)
我如何告诉lambda获取i的值而不是变量i本身.