Python Lambda函式使用總結詳解
這篇文章主要介紹了Python Lambda函式使用總結詳解,文中通過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
lambda表示式是一種匿名函式,對應python中的自定義函式def,是定義某個函式時比較高階的一種寫法。作為python初學者,本文整理了lambda的一些基本用法和特點。
lambda和def的對應關係
定義func函式,計算給定數x的平方
def func(x): return x*x
等價於
func = lambda x: x*x
其中func是函式名,x是輸入引數,x*x是輸出結果
輸入引數可以有多個,可以接收不定引數如*args或者**kwargs。
f = lambda x,*args,para,**kwargs : [args,kwargs] f(1,2,3,para='number',name='Jack',sex='male') # 輸出 [(2,3),'number',{'name': 'Jack','sex': 'male'}]
有時也可以不指定輸入引數,如:
lambda: random.randn()
lambda與map(),filter(),reduce()
lambda表示式返回一個函式,這個函式可以作為其他函式的引數。常用的可以與lambda組合的內建函式有map(),reduce().
在處理一個可迭代物件如列表,字典等時,可以用map(lambda,x) 代替 for...in...迴圈,如:
lst = [1,4,5] res = [] for i in lst: a = i*i res.append(a)
等價於
res = list(map(lambda x:x*x,lst))
可以看到這裡的lambda生成的函式直接作為map函式的function引數,對列表的每一個元素進行平方計算
同理可以將lambda用於filter進行篩選,或者reduce累積運算:
from functools import reducelst = [1,5]f_res = filter(lambda x: x>3,lst) r_res = reduce(lambda x,y: x*y,lst) print('大於3的數字有:',list(f_res)) print('累乘結果為:',r_res)
輸出結果:
大於3的數字有: [4,5]
累乘結果為: 120
lambda與if條件判斷
lambda表示式中可以插入if...else進行條件判斷,如
f = lambda x: 'even' if x%2==0 else 'odd' # f(3)輸出結果 odd
等價於
def f(x):<br data-filtered="filtered"> if x%2==0:<br data-filtered="filtered"> return 'even'<br data-filtered="filtered"> else:<br data-filtered="filtered"> return 'odd'
注意如果在lambda中使用if進行條件判斷,則else是必須宣告的,否則會引起報錯。如果不返回結果可以用 else None 表示。
if...elif...else的多條件判斷也可以用於lambda,但會使得程式碼過於複雜,所以不推薦。
lambda在pandas中的使用
lambda函式常用於DataFrame或者Series物件下的map、apply、transform方法
import pandas as pd df = pd.DataFrame({'Age': [22,21,22,20],'Score': [87,66,79,54,59]}) df['Pass'] = df.apply(lambda x: 'pass' if x[1]>=60 else 'Not pass',axis=1)
輸出新列 'Pass',根據成績判斷通過與否,輸出df後結果為:
Age Score Pass 0 22 87 pass 1 21 66 pass 2 22 79 pass 3 21 54 Not pass 4 20 59 Not pass
x為DataFrame物件,當引數axis=1時,x[1]等於第二列。
當用於Series物件時,以上程式碼等價於:
df['Pass'] = df['Score'].apply(lambda x: 'pass' if x>60 else 'Not pass')
在pandas中,通過apply,map,transform方法,lambda可以直接應用於Series級別的運算。
當使用applymap方法時,lambda可以應用於DataFrame級別的運算。
lamda的優缺點
lambda的優點:
- 不需要定義函式名(匿名函式)
- 程式碼簡潔美觀
- 適用於定義簡單的計算
lambda的缺點:
- 只有一個運算式,不適用於複雜的計算
- 不夠直觀,難於理解,增加了維護成本
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。