一个神奇的面试题的解析---------关于Python匿名函数的
def multipliers(): return [lambda x:i*x for i in range(4)] print([m(2) for m in multipliers()]) def multipliers(): return (lambda x:i*x for i in range(4)) #返回一个生成器表达式 print([m(2) for m in multipliers()])
打印结果为:
[6, 6, 6, 6]
[0, 2, 4, 6]
原因解析:
前者函数返回值为一个列表表达式,经过4次循环结果为包含四个lambda函数的列表,由于函数未被调用,循环中的i值未被写入函数,经过多次替代,循环结束后i值为3,
故结果为:6,6,6,6
后者则不然。

浙公网安备 33010602011771号