Python匿名函數(shù)lambda

# lambda 首先以一段代碼來介紹lambda

def sqrt1(n):

????return n * n

print(sqrt1(8))

# lamdba匿名函數(shù)

????sqrt2 = lambda n: n * n

????print(sqrt2(12))

詳細(xì)的格式說明

函數(shù)名 = lambda 參數(shù): 返回值

參數(shù)可以有多個,用逗號隔開

匿名函數(shù)不管邏輯有多復(fù)雜,只能寫一行,且邏輯執(zhí)行結(jié)束后的內(nèi)容就是返回值

返回值和正常函數(shù)一樣可以是任意數(shù)據(jù)類型

小練習(xí):

def add1(x,y):

????return x+y

add2 = lambda x,y:x+y

print(add2(1,2))

# 通過大量的列子去學(xué)習(xí)lambda函數(shù)

x1 = {'k1': 100, 'k2': 20, 'k3': 40}

print(max(x1))? # 這樣取的是ASCII碼 誰的ASCII大就取誰的

x1 = {'k1': 100, 'k2': 20, 'k3': 40}

def func(key):

????????return x1[key]

print(max(x1, key=func))

# 我們可以換成lambda匿名函數(shù)去解決這個問題

# 節(jié)約代碼

?print(max(x1, key=lambda k: x1[k]))

res = map(lambda x: x ** 2, [1, 2, 5, 6, 7])

for i in res:

????print(i)

ret = filter(lambda x: x > 10, [5, 7, 11, 93, 1])

for i in ret:

????print(i)

# 小復(fù)習(xí)

# 1.下面程序的輸出結(jié)果是:

d = lambda p: p * 2

t = lambda p: p * 3

x = 2

x = d(x)

x = t(x)

x = d(x)

print(x)

# 答案: 24

# 2.現(xiàn)有兩元組(('a'),('b')),(('c'),('d')),

# 請使用python中匿名函數(shù)生成列表[{'a':'c'},{'b':'d'}]

ret = zip((('a'), ('b')), (('c'), ('d')))

def fun(tup):

????return {tup[0]: tup[1]}

res1 = map(fun, ret)

# 使用lambda方法

res = map(lambda tup: {tup[0]: tup[1]}, ret)

print(list(res))

3.以下代碼的輸出是什么?請給出答案并解釋。

def multipliers():

????return [lambda x:i*x for i in range(4)]

print([m(2) for m in multipliers()])

請修改multipliers的定義來產(chǎn)生期望的結(jié)果。


因為multipliers()執(zhí)行了4次lambda x:i*x

print([m(2)for m in [lambda x:i*xlambda x:i*xlambda x:i*xlambda x:i*x])最后4次lambda是在m(2)才能輸出m(2)這是取得就是i=3?

小擴(kuò)展:

def multipliers():

????return (lambda x:i*x for i in range(4))

print([m(2) for m in multipliers()])

如果把前面得[]換成() 這就是一個生成器推導(dǎo)式,執(zhí)行一次取一次 結(jié)果就是[0,2,4,6]

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

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

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