python的lambda表达式

lambda表达式:匿名函数,它与显式函数def不一样,实质上可以当做一个表达式。

它是为处理简单的函数而出现的,其参数可选,返回对象,可以被def嵌套使用

1. 作为表达式

# 1. 作为表达式
add_func = lambda x,y : x+y  # x,y相当于传参,x+y属于函数体,返回的值就是x+y的结果
aa = add_func(1,2)
print(aa)  #输出为3
bb = add_func('who are ','you?')
print(bb)  #输出:who are you?

2. 作为函数的嵌套部分

# 2. 函数嵌套得到表达式
def get_line(a,b):
    return lambda x : a*x+b
y = get_line(1,1)  #此时y是一个函数 y=ax+b
print(y(3))    # 输出为4

3. 不带参数的函数

ss = lambda:'where are you come from?'
print(ss())   #不带参数调用,输出为:where are you come from?

4. 用于选择函数

list_func = [lambda x:x+10, lambda y:y+100, lambda z:z+1000]  #其中的每个元素都是一个小函数,可以随时调用
ff_result = []
for ff in list_func:
    ff_result.append(ff(1000))
print(ff_result)   #输出:[1010, 1100, 2000]

5. lambda表达式作为参数:max函数与lambda表达式操作字典

aa = {'s1':34,'s2':50}

kk = lambda x: aa[x]   # 因为此时相当于定义了一个kk(x)函数,且x的取值范围是aa的键,其他的x会报错

max_item = max(aa, key=kk)   # 当然这里的key=kk中,kk也可以用其他函数代替,都是对前面的参数aa进行操作,aa传入的是键
print(max_item)   
# max此时表示,先代入aa计算kk(x)的值,然后比较,得到函数值最大的aa的键,其实也就是kk(x)中的x
# 所以可以用这个函数,加上max来实现求取经过函数后的最大值所对应的自变量x,类似argmax的功能

为什么?个人觉得:函数式编程中,字典作为可迭代参数传入的是键,而不是键值对

aa = {'s1':34,'s2':50}

mm = lambda x: x
s = map(mm, aa)
print(list(s))

for ii in aa:
    print(ii)   #字典作为可迭代容器时

6. lambda表达式:max函数与lambda表达式操作列表

bb = ['s','open','what']
ff = lambda y: bb[y]   # 一定要注意 lambda传入的参数是什么
max_elem = max(range(len(bb)), key=ff)  #求取列表bb中最大值对应的索引
print(max_elem)

7. lambda表达式可用其他函数代替

# 当然,lambda表达式可以用函数来代替
def get_value(z):
    return bb[z]   #全局作用域

max_elem_2 = max(range(len(bb)), key=get_value)  #求取列表bb中最大值对应的索引
print(max_elem_2)

特点:

# 1. 简洁
# 2. 在不复杂的函数中,lambda能提高性能
# 3. lambda拥有自己的命名空间,除了自己的参数之外,不能访问其他参数

# 更pythonic的用法在 map、reduce、filter、sorted等函数式编程的函数中,因为它们都支持函数作为参数

参考:

https://blog.csdn.net/qq_39226755/article/details/86773171

https://www.cnblogs.com/hf8051/p/8085424.html

原文地址:https://www.cnblogs.com/qi-yuan-008/p/12075151.html