# 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]