Creating lambda expressions on the fly
本问题已经有最佳答案,请猛点这里访问。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | def multipliers(): l = [] for i in range(4): l.append(lambda x : x * i ) return l >>> ll[0](2) 6 >>> ll[1](2) 6 >>> ll[2](2) 6 >>> ll[3](2) 6 |
你能解释一下结果吗?我希望得到:
1 2 3 4 | 0 2 4 6 |
原因是Python的闭包是后期绑定的。这意味着在调用内部函数时会查找闭包中使用的变量值。因此,当调用
摘自:http://www.toptal.com/python/interview-questions
问题是,正如人们所说,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | >>> def multipliers(): l = [] for i in range(4): l.append(lambda x, i=i : x * i ) return l >>> lst = multipliers() >>> lst[0](2) 0 >>> lst[1](2) 2 >>> lst[2](2) 4 >>> lst[3](2) 6 >>> |