匿名函數lambda及面試題三道

# 函數名 = lambda 參數 :返回值。       匿名函數只是函數,若是要經過可迭代對象給匿名函數傳參,就須要使用 map 或者 filter
calc = lambda n:n**n                     calc(1)
clac2 = lambda x,y:x+y            calc2(1,2) 參數能夠有多個,用逗號隔開 匿名函數無論邏輯多複雜,只能寫一行,且邏輯執行結束後的內容就是返回值 返回值和正常的函數同樣能夠是任意數據類型 求最大value的key dict
= {'k1':10,'k2':100,'k3':30} print(max(dict)) print(max(dict,key=lambda k:dict[k])) 內置方法中帶key的有 max min filter map sorted,均可以和lambda合做

 

 

面試題:python

#作面試題的時候,要多想一想考什麼,好比生成器,迭代器,裝飾器必考,多想一想是否是考這些
#!!!!!!!!!!!!!!!考匿名函數,其實就是爲了考內置函數  max  min  filter  map  sorted
#第一題讀代碼
d = lambda q:q*2
t = lambda t:t*3
x = 2
x = d(x)
x = t(x)
x = d(x)
print(x)

#第二題,現有兩元組(('a'),('b')),(('c'),('d')),
#清用python中匿名函數生成列表[{'a':'c'},{'b':'d'}]
ret = zip((('a'),('b')),(('c'),('d')))
# def func(tup):
#     return {tup[0]:tup[1]}
res = map(lambda tup:{tup[0]:tup[1]},ret)
print(list(res))

#第三題,如下代碼的輸出是什麼?
def multipliers():
    ret = [lambda x:i*x for i in range(4)]
    return ret

print([m(2) for m in multipliers()])
#multipliers() 運行完 返回值是  [lambda x:i*x for i in range(4)]
#這個匿名函數 此時是有運行的,能夠理解成運行了四次lambda x:i*x
#[lambda x:i*x  lambda x:i*x  lambda x:i*x  lambda x:i*x]
#可是運行完了四次,此時 i == 3  因此當 m(2)給匿名函數傳值的時候,輸出結果就爲[6,6,6,6]
#若想達到預期結果,只要把 返回值改成  (lambda x:i*x for i in range(4)),讓它變成生成器表達式
#此時調用multipliers函數並不會運行,只有當 m(2)執行一次for循環纔會運行一次
相關文章
相關標籤/搜索