# lambda 首先以一段代码来介绍lambda
def sqrt1(n):
return n * n
print(sqrt1(8))
# lamdba匿名函数
sqrt2 = lambda n: n * n
print(sqrt2(12))
详细的格式说明
函数名 = lambda 参数: 返回值
参数可以有多个,用逗号隔开
匿名函数不管逻辑有多复杂,只能写一行,且逻辑执行结束后的内容就是返回值
返回值和正常函数一样可以是任意数据类型
小练习:
def add1(x,y):
return x+y
add2 = lambda x,y:x+y
print(add2(1,2))
# 通过大量的列子去学习lambda函数
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匿名函数去解决这个问题
# 节约代码
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)
# 小复习
# 1.下面程序的输出结果是:
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.现有两元组(('a'),('b')),(('c'),('d')),
# 请使用python中匿名函数生成列表[{'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的定义来产生期望的结果。
因为multipliers()执行了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
小扩展:
def multipliers():
return (lambda x:i*x for i in range(4))
print([m(2) for m in multipliers()])
如果把前面得[]换成() 这就是一个生成器推导式,执行一次取一次 结果就是[0,2,4,6]