面试题1

def multipliers():
    return [lambda x:i*x for i in range(4)]
print([m(2) for m in multipliers()])

解释:

for m in multipliers() 这条语句到底干了什么?其实它干的事情只有一个,那就是遍历了函数multipliers()返回的列表,在遍历列表的同时把每个匿名函数赋值给了m,把它拆分来看就是这样:
m = lambda x:i*x
m = lambda x:i*x
m = lambda x:i*x
m = lambda x:i*x
并且每次都执行了一次 m(2),也就是每次都调用了一下匿名函数,注意:此时此刻匿名函数才真正被调用了,然后它会引用外层命名空间的变量i,那么此时i的值是多少呢? 
因为for i in range(4)这个for循环已经执行完毕,i的值等于3,所以每次当执行m(2)时,i的值都等于3

所以每次调用m(2)的结果都是6
最终输出结果为[6, 6, 6, 6]
原文地址:https://www.cnblogs.com/baicai37/p/12943837.html