您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關Lambda函數怎么在Python項目中使用,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
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 reducelst = [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):<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, 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的缺點:
只有一個運算式,不適用于復雜的計算
不夠直觀,難于理解,增加了維護成本
上述就是小編為大家分享的Lambda函數怎么在Python項目中使用了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。