匿名函数,内置函数

匿名函数

对比使用def关键字创建的是有名字的函数,使用lambda关键字创建则是没有名字的函数,即匿名函数。

语法: lambda 参数 : expression

举例:

lambda x,y : x + y
#等同于
def func(x,y):
	return x + y

#调用方式
res = (lambda x,y : x + y)(1,2)
>>3

匿名函数的引用计数为0,使用一次就释放,只临时使用一次。

匿名函数单独使用毫无意义,必须配合内置函数使用。

内置函数

python内部提供的内置方法

max(可迭代对象):求最大值

min():求最小值

sorted():对可迭代对象进行排序,默认升序。当reverse = True 反转

map(函数地址,可迭代对象):映射

reduce(函数地址,可迭代对象,初始值(默认为0)):合并

filter(函数地址,可迭代对象):过滤

举例:

#max求最大值
list1 = [1,2,3,4,5]
print(max[list1])
>>>5


#获取字典中薪资最大的人的名字  结合匿名函数
salaries = {
    'lzn':100,
    'xxt':300,
    'yyh':200,
    'abc':500
}
#max(salaries) 直接用max进行比较,比较的是字典的key
res = max(salaries, key= lambda x: salaries[x])
#max会迭代字典salarie,每取出一个人名就会当作参数传给指定的匿名函数,然后将匿名函数的返回值当做比较依据,最终返回薪资最高的人名
print(res)
>>>'abc'


#同理,将人名按照薪资大小进行排序
sorted(salaries, key = lambda x: salaries(x))
>>>['lzn', 'yyh', 'xxt', 'abc'] #升序排列
sorted(salaries, key = lambda x: salaries(x),reverse = True)
>>>['abc', 'xxt', 'yyh', 'lzn']



#map() 将列表中的人的名字除了'lzn'都添加后缀_xjb
name_list = ['lzn','xxt','yyh','abc']
res = map(lambda name:name if name == 'lzn' else name + '_xjb',name_list)
print(res)  #map对象
print(list(res))
>>>['lzn', 'xxt_xjb', 'yyh_xjb', 'abc_xjb']
#map会将可迭代对象中的每一个值进行修改,然后映射到对象中
#可以再将map对象转成列表/元组,但只能转一次


#reduce() 求和运算,1-100的和
from functools import reduce
res = reduce(lambda x,y :x+y,range(1,101),0)
print(res)
>>>5050
'''
python3中,reduce被集成到模块functools中,需要导入才能使用
在初始值为0时,reduce函数先迭代一次可迭代对象得到一个初始值,传给x,然后继续迭代得到第二个值传给y,得到运算结果,再将运算结果传给x,再迭代一次得到的值传给y......
'''


#filter()过滤 将列表中不带有_xjb的人名过滤
name_list = ['lzn', 'xxt_xjb', 'yyh_xjb', 'abc_xjb']
res = filter(lambda name: name.endswith('_xjb') ,name_list)
print(res) # filter对象
print(list(res))
>>>['xxt_xjb', 'yyh_xjb', 'abc_xjb']
'''
filter会将函数中返回的结果为True对应的参数值过滤出来
'''
原文地址:https://www.cnblogs.com/littleb/p/11866957.html