1. 程式人生 > >關於lambda引出的碎碎念

關於lambda引出的碎碎念

第一次接觸lambda表示式是在學習python的書上

“lambda表示式是一個匿名函式” -----某本不願意透漏姓名的書如是說

我看到這話的第一個反應是:Y有病吧,函式不就是堂堂正正的寫出來好減少程式碼的重複度的吧!

你Y匿名是什麼意思啊?要幹壞事嗎?將來出來差錯道理要找誰負責啊!遂快速翻過了此節////

---------------------幾個月過去了-------------------

在論壇上看到了這樣的一個求助

{

    對巢狀列表裡面的小列表們按照自定義的條件進行排序,

    list = [[1], [1,2,3,4,5,6,7], [1,2,3], [1,2], [1,2,3,4], [1,2,3,4,5,6,7,8]]
    方程1: (列表長度) / 10

    方程2: (列表長度) / 12

     list裡的前三個小列表通過方程1, 後三個小列表通過方程2來加以限制,再一起來排序想得到排序的結果:
    list = [[1],[1,2],[1,2,3],[1,2,3,4],[1,2,3,4,5,6,7,8],[1,2,3,4,5,6,7]]

}

正當我想操起鍵盤大打出手的時候發現瞭如下的回答

list = [[1], [1,2,3,4,5,6,7], [1,2,3], [1,2], [1,2,3,4], [1,2,3,4,5,6,7,8]]

l=map(lambda x:{list.index(x):float(len(x))/10} if list.index(x)<3 else {list.index(x):float(len(x))/12},list)

a = []
for i in sorted(l,key=lambda x:x.values()):
        a.append(list[sum(i.keys(),0)])

print a

恩............

這啥啊????????

----------------下面是正經的學習時間---------------------------

先看map,在python2。7中help(map)的結果

  map(function, sequence[, sequence, ...]) -> list

https://my.oschina.net/zyzzy/blog/115096 這裡講的比較詳細

簡而言之 map(function, seq1,seq2,...,seqn) = [function(arg1,arg2,...,argn) for arg1,arg2,...,argn in zip(seq1,seq2,...,seqn)]

那麼我們知道了I把list和lambda x匿名函式對在了一起

恩 所以說lambda其實就是大牛們用的即拋型函數了(就像上古版本的define一樣 不過因為是真正的函式所以沒有的define那麼多討厭的特性)

那麼我們lambda的說明

lambda arg1,arg2,...,argN:expression using arguments

在python的lambda的主體是一個表示式,而不是一個程式碼塊。僅僅能在lambda表示式中封裝有限的邏輯進去。

比如上文中的多邏輯 return A if TRUE else return B

其實就是一個語法糖,不過聽說C++11也支援lambda且更加強大  下次再看C++的吧