一道新浪面试题的解析
python中的一种特殊语法
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
上题的本质如下:
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
注意去理解
此时修改一下上题中的参数,看看新的结果是什么
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
注意去理解
此时如果再次对上题中的参数进行更改,看看结果有会如何变化
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
注意理解,本质上就是看其执行了还是没执行。
拥抱不确定,未来可期!喜欢该文章请不吝点赞推荐,如有疑问欢迎留言,我们一起探讨。