面試題1
題目要求:
現有兩個元組,((“a”),(“b”)),((“c”),(“d”)). 請使用python中的匿名函數生成列表[{“a”:“c”},{“b”:“d”}]
'''
做法(一)
所用的知識點:zip,lambda
'''
it = zip((("a"),("b")),(("c"),("d")))
func = lambda tup:{tup[0]:tup[1]} #匿名函數
lis = []
for i in it:
dic = func(i)
lis.append(dic)
print(lis)
'''
做法(二)
所用的知識點:zip、lambda、map
'''
it = zip((("a"),("b")),(("c"),("d")))
func = lambda tup:{tup[0]:tup[1]} #匿名函數
ret = map(func,it) #map方法
print(list(ret))
'''
做法(三)
是對做法二的簡寫
'''
print(list(map(lambda tup:{tup[0]:tup[1]},zip((("a"),("b")),(("c"),("d"))))))
面試題2
題目要求:
以下代碼的輸出是什麼?給出答案並解釋。
代碼1
def multipliers():
return [lambda x:i*x for i in range(4)]
print([m(2) for m in multipliers()])
輸出結果:
[6, 6, 6, 6]
解析:
'''
代碼1就相當於:以下代碼:
'''
def multipliers():
i = 3
return [lambda x:i*x ,lambda x:i*x,lambda x:i*x,lambda x:i*x ]#返回了一個含有四個函數的列表,此時,函數都未執行
lis = []
for m in multipliers():
ret = m(2) #m()就是其中的一個函數,此時函數才執行,這時,i經過for循環,已經是3了。
lis.append(ret)
print(lis)
代碼2
def multipliers():
return (lambda x:i*x for i in range(4)) #此處改爲了生成器表達式,返回一個生成器。
print([m(2) for m in multipliers()])
輸出結果
[0, 2, 4, 6]
解析:
當m(2)執行一次 纔在生成器中生成一個,所以第一次的執行m(2)的時候i=0,第二次的時候i=1