關於lambda引出的碎碎念
“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那麼多討厭的特性)
那麼我們lamb
da的說明
lambda arg1,arg2,...,argN:expression using arguments
在python的lambda的主體是一個表示式,而不是一個程式碼塊。僅僅能在lambda表示式中封裝有限的邏輯進去。
比如上文中的多邏輯 return A if TRUE else return B
其實就是一個語法糖,不過聽說C++11也支援lambda且更加強大 下次再看C++的吧