一个lambda 表达式的学习

1 >>> li=[lambda :x for x in range(10)] 
2 >>> res=li[0]() 
3 >>> print res 
4 9

这里的第一个x处在嵌套作用域中,对于函数,或者lambda表达式,在列表里面存储的都是执行代码。

所以x循环之后,最后的值是9.然后调用lambda,当然输出是9啦。

改进

li=[(lambda x:(lambda :x)(x)for x in range(10))]

说一下,第一个x,可以看成函数参数,传给第二个嵌套作用域里的x,第三个x是调用这个(lambda x:(lambda :x)()函数,返回lambda:x

你也可以这么写

li = [lambda x=x: x for x in range(9)]

这里的x是保证调用lambda时可以不用传参数。

posted @ 2016-09-27 17:24  dreamfor  阅读(103)  评论(0)    收藏  举报