1. 程式人生 > 程式設計 >Python Lambda函式使用總結詳解

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的缺點:

  • 只有一個運算式,不適用於複雜的計算
  • 不夠直觀,難於理解,增加了維護成本

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。