一个神奇的面试题的解析---------关于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

后者则不然。

posted @ 2022-03-08 19:57  道所在虽千万人吾往矣  阅读(98)  评论(0)    收藏  举报