循环中的Python Lambda考虑到以下代码片段:# directorys == {'login': <object at ...>, 'home': <object at ...>}for d in directorys:
self.command["cd " + d] = (lambda : self.root.change_directory(d))我希望创建一个包含两个功能的字典,如下所示:# Expected :self.command == {
"cd login": lambda: self.root.change_directory("login"),
"cd home": lambda: self.root.change_directory("home")}但是看起来,生成的两个lambda函数完全相同:# Result :self.command == {
"cd login": lambda: self.root.change_directory("login"),
"cd home": lambda: self.root.change_directory("login") # <- Why login ?}我真的不明白为什么。你有什么建议吗?
5 回答
![?](http://img1.sycdn.imooc.com/5458626a0001503602200220-100-100.jpg)
HUH函数
TA贡献1836条经验 获得超4个赞
lambda d=d: self.root.change_directory(d)
lambda bound_d=d: self.root.change_directory(bound_d)
(lambda d=d: lambda: self.root.change_directory(d))()# or(lambda d: lambda: self.root.change_directory(d))(d)
![?](http://img1.sycdn.imooc.com/5458477300014deb02200220-100-100.jpg)
临摹微笑
TA贡献1982条经验 获得超2个赞
d
d
funcs = []for x in [1,2,3]: funcs.append(lambda: x)for f in funcs: print f()# output:333
def makeFunc(x): return lambda: x funcs = []for x in [1,2,3]: funcs.append(makeFunc(x))for f in funcs: print f()# output:123
lambda bound_x=x: bound_x
![?](http://img1.sycdn.imooc.com/533e4c420001b2e502000200-100-100.jpg)
子衿沉夜
TA贡献1828条经验 获得超3个赞
foo = lambda d: lambda : self.root.change_directory(d)for d in directorys: self.command["cd " + d] = (foo(d))
添加回答
举报
0/150
提交
取消