lambda表达式,谁能帮忙解答下,为啥第二种表达式和第一种执行结果不一样
def func2():
return [lambda x:x*i for i in range(4)]
print([m(2) for m in func2()])
def func3():
return (lambda x:x*i for i in range(4))
print([m(2) for m in func3()])
结果:
[6, 6, 6, 6]
[0, 2, 4, 6]
记得以前有类似的问答里解释过,第一个程序里返回的是通过列表推导式得到的包含四个匿名函数的列表,里面的临时变量i到最后都变成了最后一个数字3,所以四个匿名函数的返回值都是x*3。
而第二个函数返回的是一个生成器generator,并不是列表,而它与列表的不同就是它并不即时生成列表,而是记下生成规则,当调用的时候再通过规则生成元素,即例子里的匿名函数,这时临时变量i参与到每一步的运算,所以最终结果不同。