一. lambda表達式
Python中定義了一種快速簡化定義匿名函數(shù)的方式叫做lambda表達式盗似,它的作用就是代替一些簡單的函數(shù),使得代碼看上去更簡潔并且可讀性高沥邻。
- lambda函數(shù)是匿名的
- lambda函數(shù)一般功能簡單
- lambda就是用來定義一個匿名函數(shù)的危虱,如果還要給他綁定一個名字的話,就會顯得有點畫蛇添足唐全,如語法規(guī)則里面的例子埃跷。
- lambda函數(shù)有輸入和輸出,輸入是傳入到參數(shù)列表argument_list的值邮利,輸出是根據(jù)表達式expression計算得到的值弥雹。
二. lambda語法規(guī)則
lambda argument_list: expression
表達式由3部分構(gòu)成:ps.不要忘記冒號 ' : '
- lambda關(guān)鍵字:Python的保留字,開始一個lambda表達式
- argument_list:參數(shù)列表延届,和函數(shù)的參數(shù)表類似剪勿,表達式中出現(xiàn)的參數(shù)需要在argument_list中有定義
- expression:函數(shù)的功能(簡單),并且表達式只能是單行的方庭,函數(shù)的返回值是該表達式的結(jié)果厕吉。
舉個栗子:
add = lambda x, y : x+y
add(1,2) # 結(jié)果為3
三. 用途
lambda表達式的使用酱固,一直爭議比較大,畢竟增加了程序員的閱讀成本头朱。一般來說运悲,作為匿名函數(shù)lambda經(jīng)常使用在函數(shù)的參數(shù)中,或者pandas數(shù)據(jù)篩選等等髓窜。
部分Python內(nèi)置函數(shù)接收函數(shù)作為參數(shù)扇苞。典型的此類內(nèi)置函數(shù)有這些欺殿。
-
map(function, iterable, ...)
序列映射函數(shù):
function是函數(shù)名寄纵,iterable...是一個或者多個序列;序列中的每一個元素調(diào)用 function 函數(shù)脖苏,返回包含每次 function 函數(shù)返回值的列表的迭代器程拭。
a=[1,2,3,4,5]
b=[1,1,1,1,1]
m=map(lambda x,y: x+y,a,b)
for i in m:
print(i)
Out[1]:
2 3 4 5 6
-
sorted(iterable, cmp=None, key=None, reverse=False)
排序函數(shù):
sorted 可以對所有可迭代的對象進行排序操作。iterable是可迭代序列棍潘;cmp是定義比較規(guī)則的函數(shù)恃鞋,它具有兩個參數(shù),參數(shù)的值都是從iterable中取出亦歉,此函數(shù)必須遵守恤浪,大于則返回1,小于則返回-1肴楷,等于則返回0水由;key是定義比較元素的函數(shù),只有一個參數(shù)赛蔫,是從iterable中取出的砂客;reverse = True 降序 , reverse = False 升序呵恢。
cmp很少自定義鞠值,默認遵循數(shù)學中的大小關(guān)系。
#按照年齡排序
student=[('Tom','boy',12),('Marry','girl',13),('LiMing','boy',11)]
s=sorted(student,key=lambda x:x[2],reverse=True)
print(s)
Out[2]:
[('Marry', 'girl', 13), ('Tom', 'boy', 12), ('LiMing', 'boy', 11)]
-
filter(function, iterable)
序列過濾函數(shù):
第一個參數(shù)為過濾函數(shù)名渗钉,第二個為序列彤恶,序列的每個元素作為參數(shù)傳遞給函數(shù)進行判,然后返回 True 或 False鳄橘,最后將返回 True 的元素放到新列表中返回粤剧。
student=[('Tom','boy',12),('Marry','girl',13),('LiMing','boy',11)]
s=filter(lambda x:x[1]=='boy', student)
Out[3]:
('Tom', 'boy', 12)
('LiMing', 'boy', 11)