# 函數名 = 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合作
面試題:
#做面試題的時候,要多想想考什么,比如生成器,迭代器,裝飾器必考,多想想是不是考這些 #!!!!!!!!!!!!!!!考匿名函數,其實就是為了考內置函數 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循環才會運行一次
