python lambda

lambda 表達(dá)式,又稱匿名函數(shù),常用來表示內(nèi)部僅包含 1 行表達(dá)式的函數(shù)。如果一個(gè)函數(shù)的函數(shù)體僅有 1 行表達(dá)式,則該函數(shù)就可以用 lambda 表達(dá)式來代替。

lambda 表達(dá)式的語法格式如下:
name = lambda [list] : 表達(dá)式

其中,定義 lambda 表達(dá)式,必須使用 lambda 關(guān)鍵字;[list] 作為可選參數(shù),等同于定義函數(shù)是指定的參數(shù)列表;value 為該表達(dá)式的名稱。

add = lambda x,y:x+y
print(add(3,4))
7

if 搭配 lambda 使用的效果如下:

add = lambda x,y:x+y if x>3 else 0
print(add(1,4))
print(add(4,4))
0
8
f = lambda x: ['small', 'big'][x>100]
print(f(101))
print(f(99))
big
small


部分Python內(nèi)置函數(shù)接收函數(shù)作為參數(shù)。典型的此類內(nèi)置函數(shù)有這些。

  • filter函數(shù)。此時(shí)lambda函數(shù)用于指定過濾列表元素的條件。
a=filter(lambda x: x % 3 == 0, [1, 2, 3])
print(list(a))
[3]
  • sorted函數(shù)。此時(shí)lambda函數(shù)用于指定對(duì)列表中所有元素進(jìn)行排序的準(zhǔn)則。
a=sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=lambda x: abs(5-x))
print(list(a))
[5, 4, 6, 3, 7, 2, 8, 1, 9]

將列表[1, 2, 3, 4, 5, 6, 7, 8, 9]按照元素與5距離從小到大進(jìn)行排序,其結(jié)果是[5, 4, 6, 3, 7, 2, 8, 1, 9]。

  • map函數(shù)。此時(shí)lambda函數(shù)用于指定對(duì)列表中每一個(gè)元素的共同操作。
a=map(lambda x: x+1, [1, 2,3])
print(list(a))
[2, 3, 4]
#效果類似于如下的for循環(huán)
foo = [1,2,3,4,5]
print( [x * 2 + 10 for x in foo])
print( [x * 2 + 10 if x>4 else 0 for x in foo])
[12, 14, 16, 18, 20]
[0, 0, 0, 0, 20]
  • reduce函數(shù)。此時(shí)lambda函數(shù)用于指定列表中兩兩相鄰元素的結(jié)合條件。例如reduce(lambda a, b: '{}, {}'.format(a, b), [1, 2, 3, 4, 5, 6, 7, 8, 9])將列表 [1, 2, 3, 4, 5, 6, 7, 8, 9]中的元素從左往右兩兩以逗號(hào)分隔的字符的形式依次結(jié)合起來,其結(jié)果是'1, 2, 3, 4, 5, 6, 7, 8, 9'。
from functools import reduce
a= reduce(lambda a, b: '{}, {}'.format(a, b), [1, 2, 3, 4, 5, 6, 7, 8, 9])
print(list(a))
print(a,type(a))
['1', ',', ' ', '2', ',', ' ', '3', ',', ' ', '4', ',', ' ', '5', ',', ' ', '6', ',', ' ', '7', ',', ' ', '8', ',', ' ', '9']
1, 2, 3, 4, 5, 6, 7, 8, 9 <class 'str'>

對(duì)比:

def add(x, y):
    return x + y
def mulit(x, y):
    return x * y

print(reduce(add, [1, 2, 3, 4, 5])) #輸出:15
print(reduce(add, [1, 2, 3, 4, 5], 10)) #輸出:25

print(reduce(mulit, [1, 2, 3, 4, 5])) #輸出:120
print(reduce(mulit, [1, 2, 3, 4, 5], 10)) #輸出:1200

print(reduce(lambda x,y:x+y,[1, 2, 3, 4, 5]))#輸出:15
print(reduce(lambda x,y:x+y,[1, 2, 3, 4, 5], 10))#輸出:25
print(reduce(lambda x,y:x*y,[1, 2, 3, 4, 5], 10))#輸出:1200
15
25
120
1200
15
25
1200

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • lambda是Python編程語言中使用頻率較高的一個(gè)關(guān)鍵字。那么,什么是lambda?它有哪些用法?網(wǎng)上的文章不...
    BABYMISS閱讀 133評(píng)論 0 2
  • 橡皮擦,一個(gè)逗趣的互聯(lián)網(wǎng)高級(jí)網(wǎng)蟲,新的系列,讓我們一起 Be More Pythonic。 @[toc](滾雪球?qū)W...
    夢(mèng)想橡皮擦閱讀 393評(píng)論 0 1
  • 一. lambda表達(dá)式 Python中定義了一種快速簡(jiǎn)化定義匿名函數(shù)的方式叫做lambda表達(dá)式,它的作用就是代...
    躺在稻田里的小白菜閱讀 529評(píng)論 0 1
  • 引言 前段時(shí)間,沒事兒時(shí)翻看了自己剛參加工作時(shí)寫的一些代碼,發(fā)現(xiàn)代碼中有好幾處分別都用到了lambda表達(dá)式,從代...
    湯尼房閱讀 7,772評(píng)論 0 2
  • 1.lambda作為一個(gè)表達(dá)式,定義了一個(gè)匿名函數(shù),簡(jiǎn)化了函數(shù)定義書寫形式,使得代碼更為簡(jiǎn)潔。 2.python中...
    _沉夢(mèng)昂志閱讀 364評(píng)論 1 0

友情鏈接更多精彩內(nèi)容