首页 > 其他 > 详细

面试题1

时间:2020-05-23 19:56:44      阅读:48      评论:0      收藏:0      [点我收藏+]
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]

 

面试题1

原文:https://www.cnblogs.com/baicai37/p/12943837.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!