A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© KingHWJ 初级黑马   /  2019-7-22 20:08  /  1011 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马