黑马程序员技术交流社区
标题:
Python易错题-lambda函数遍历输出
[打印本页]
作者:
KingHWJ
时间:
2019-7-22 20:08
标题:
Python易错题-lambda函数遍历输出
本帖最后由 KingHWJ 于 2019-7-22 20:08 编辑
[Python]
纯文本查看
复制代码
li = [lambda: x for x in range(10)]
res = li[0]()
print (res)
这道题,在才开始学lambda函数的时候,很容易犯错,很容易以为输出结果是0。仔细看这段代码,第一行的意思是一个列表推导式,列表里面是lambda声明的一个匿名函数,x变量从在0~9的范围内,依次遍历,最后输出一个列表。首先我们要明确一个概念,函数在定义时是不执行代码的,只有它在被调用的时候,才会执行。所以,在第一行代码,依次遍历的过程中,先是生成这个li的列表,然后,才到后面调用,所以li列表里的函数,已经完全执行,其中每遍历一次,应该生成一个函数,这
个列表,有10个元素,每个元素都是一个函数,函数体是返回x的值,前面说过,没有执行的时候,x是没有值的。
所以,当去执行这个列表中的某个函数的时候,函数就去取这个x的值,那么x的值已经变为9了。
因为for循环执行完毕了,x最后变
成了9
。
所以,再用li[0]取值的时候,x=9参与计算,函数返回的是9
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2