匿名函数:
把原来按照套路编写的函数,进行缩减,简化函数定义部分
- 格式:
lambda 参数1,参数2…… :运算(即返回的结果)
s=lambda a,b:a+b #s是一个函数
print(s)
>>> <function <lambda> at 0x000001B7B79A56A8>
x=s(1,2) #调用s函数
print(x)
>>> 3
- 匿名函数作为参数出现:
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
- 匿名函数与内置函数的结合:
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}]