一道新浪面试题的解析
python中的一种特殊语法
1 2 3 4 5 6 7 8 9 | li = [x + 100 for x in range ( 10 ) if x > 6 ] li1 = [x + 100 for x in range ( 10 )] print (li) print (li1) #执行结果: #[107, 108, 109] #[100, 101, 102, 103, 104, 105, 106, 107, 108, 109] |
新浪的一道面试题
li = [lambda :x for x in range(10)]
print(li[0]())
结果是多少?
分析: 因为lamda :x 这个函数在进行循环时,并没有执行。而在外层打印此时的x,为9,
这时把x的值放入内部进行执行,相当于print(lambda : 9),所以答案为9
上题的本质如下:
1 2 3 4 5 6 7 8 9 10 11 12 | li = [] for i in range ( 10 ): def f1(): return i li.append(f1) # li为列表,内部为相同功能的函数 print (li[ 0 ]()) print (li[ 1 ]()) print (li[ 2 ]()) print (li[ 3 ]()) print (li[ 4 ]()) |
执行结果:
9
9
9
9
9
注意去理解
此时修改一下上题中的参数,看看新的结果是什么
1 2 3 4 5 6 7 8 9 10 | li = [] for i in range ( 10 ): def f1(x = i): # 原来没有参数,此时加上参数 return i li.append(f1) print (li[ 0 ]()) print (li[ 1 ]()) print (li[ 2 ]()) print (li[ 3 ]()) |
执行结果如下:
9
9
9
9
9
注意去理解
此时如果再次对上题中的参数进行更改,看看结果有会如何变化
1 2 3 4 5 6 7 8 9 10 | li = [] for i in range ( 10 ): def f1(x = i): return x # 此时只把上例中的返回值给改为x li.append(f1) print (li[ 0 ]()) print (li[ 1 ]()) print (li[ 2 ]()) print (li[ 3 ]()) |
执行结果:
0
1
2
3
4
注意理解,本质上就是看其执行了还是没执行。
拥抱不确定,未来可期!喜欢该文章请不吝点赞推荐,如有疑问欢迎留言,我们一起探讨。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步