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, para, 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(), filter(), reduce().

在處理一個可迭代對象如列表,字典等時,可以用map(lambda, x) 代替 for...in...循環,如:

 

lst = [1, 2, 3, 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 reduce
lst = [1, 2, 3, 4, 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):
  if x%2==0:
    return 'even'
  else:
    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, 21, 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的缺點:

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM