python中匿名函数lambda的使用,绝对易懂

匿名函数:

把原来按照套路编写的函数,进行缩减,简化函数定义部分

  1. 格式:lambda 参数1,参数2…… :运算(即返回的结果)
s=lambda a,b:a+b #s是一个函数
print(s)

>>> <function <lambda> at 0x000001B7B79A56A8>

x=s(1,2)    #调用s函数
print(x)

>>> 3
  1. 匿名函数作为参数出现:
def func(x,y,func2):
	print(x,y)
	print(func2)
	m = func2(x,y)
	print(m)

func(2,4,lambda a,b:a+b)     #调用

>>> 2 4
>>> <function <lambda> at 0x00000220E58A5730>
>>> 6
  1. 匿名函数与内置函数的结合:
  • max(iterable, *[, default=obj, key=func]),key要求是一个函数,用来指定取最大值的方法(是可有可无的参数) :
list1=[{'a':15,'b':13},{'a':9,'b':18},{'a':16,'b':7},{'a':21,'b':3}]
m = max(list1, key = lambda x:x['a'])	# 按照'a'值的最大返回值
print('list1的最大值为:',m)

>>> list1的最大值为: {'a': 21, 'b': 3}
  • map(函数,可迭代的参数):映射,对列表里的每个元素进行某些操作
list1 = [9,15,9,12,4,3,4,6,3]
result = map(lambda x:x+2,list1)
print(list(result))	#将map里的对象强转成列表
print(result)       #map里的对象的地址


>>> [11, 17, 11, 14, 6, 5, 6, 8, 5]  #列表里所有的元素进行了+2操作
>>> <map object at 0x0000013315C38080>

因为,lambda定义函数还可以进行判断,故而map函数也可以使用

# 对某个数进行+1操作
func=lambda x:x if x%2==0 else x+1
result = func(5)
print(result)

>>> 6

# 对列表中的奇数进行+1操作
list1 = [9,15,9,12,4,3,4,6,3]
m = map(lambda x:x if x%2==0 else x+1,list1)
print(list(m))

>>> [10, 16, 10, 12, 4, 4, 4, 6, 4]
  • reduce(函数,序列,initial=None):对列表(可迭代的都可以)中的元素进行加减乘除运算的函数,从左至右依次传参;initial默认为None,如果设置值了,只填一个元素的列表要求求和,则会加值e.g. (reduce(func,list,值)
from functools import reduce  #reduce不是内置函数,需要导入

'''
reduce(lambda x, y: x+y, [1, 2, 3, 4, 5], 10) 
=> calculates ((((1+2)+3)+4)+5) + 10
'''

list1=[7,5,8,7,3,6,11,5,4,5]
result=reduce(lambda x,y:x+y,list1)
print(result)  #列表中所有元素求和

>>> 61
  • filter(函数,可迭代):对元素进行过滤,作为参数的函数的返回值需为布尔类型
list2 = [17, 7, 5, 19, 17, 11, 19, 1, 3, 11, 10, 6, 16, 8, 18]
result = filter(lambda x:x>10,list2)
print(list(result)) 

>>> [17, 19, 17, 11, 19, 11, 16, 18]
  • sorted(iterable, cmp=None, key=None, reverse=False)

    key指定可迭代对象中的一个元素来进行排序
    默认为正序排列,如果倒序排列,加上reverse=True:

list1 = [{'a':15,'b':13},{'a':9,'b':18},{'a':16,'b':7},{'a':21,'b':3}]
result = sorted(list1, key=lambda x:x['a'])
print(result) 

>>> [{'a': 9, 'b': 18}, {'a': 15, 'b': 13}, {'a': 16, 'b': 7}, {'a': 21, 'b': 3}]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值