一道新浪面试题的解析

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

注意理解,本质上就是看其执行了还是没执行。

 

posted @ 2017-02-21 19:24  早晨我在雨中采花  阅读(144)  评论(0编辑  收藏  举报