Python 匿名函数与内置函数

一、匿名函数
没有名字的函数

语法:
    lambda 参数: 返回值
    lambda :

例如:lambda x,n:x**n 
f = lambda x,n:x**n
f(2,3)
>>>8

注意:
匿名函数需要一次性使用。
匿名函数单独使用毫无意义,它必须配合 “内置函数” 一起使用的才有意义。

# 有名函数
def func():   #func --->内存地址
    return 1
print(func())  # func函数对象 + ()   即调用

# 匿名函数:
# 匿名(), return 已经自动添加了
# lambda 匿名(): return 1
func = lambda : 1
print(func())   # 1

func = lambda : 1
print()

二、内置函数
内置函数:python内部提供的自带的内置方法
如:range,print,len,max,min,sorted,map,filter

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

max内部会将可迭代对象中的每一个值取出,并且进行判断
list1 = [1,2,3,4,5]
print(max(list1))  
>>>5

# 需求: 获取dict1中薪资最大的人的 名字
dict1 = {
    'tank': 1000,
    'egon': 500,
    'sean': 200,
    'jason': 100
}
print(max(dict1, key=lambda x: dict1[x]))
>>>tank

sorted: 默认升序(从小到大) reverse:反转 reverse默认是False

list1 = [10, 2, 3, 4, 5]
print(sorted(list1))
print(sorted(list1, reverse=True))     # reverse=True--> 降序


dict1 = {
    'tank': 100,
    'egon': 500,
    'sean': 200,
    'jason': 50
}
# new_list = ['egon', 'sean', 'tank', 'jason']
new_list = sorted(dict1, key=lambda x: dict1[x], reverse=True)
print(new_list)

map: 映射

语法:map(函数地址, 可迭代对象) ---> map对象
	 map会将可迭代对象中的每一个值遍历取出,并且按照指定的规则映射到一个map对象中,
	 可以再将map对象转换成列表/元组。
	 注意: 只能转一次。

如:
name_list = ['egon', 'jason', 'sean',  'tank']
map_1 = (map(lambda x : x + '喜欢吃生蚝' if x == 'tank' else x + '_DJB',name_list))
print(map_1)   # map_1 是一个map对象  即<map object at 0x00000177C926FB48>
print(list(map_1))   #转成列表  map_1-->生成器--->用完后,就不能再取了
#print(tuple(list(map_1)))   #是一个空元组

reduce: 合并

from functools import reduce

	-每次从可迭代对象中获取两个值进行合并,并且可以设置初始值	
	-语法:reduce(lambda x, y: x + y, range(1, 101), 0)
	
# 需求: 求1——100的和
res = reduce(lambda x, y: x + y, range(1, 101), 1000)
print(res)  # 6050

filter:过滤

语法:filter(函数地址,可迭代对象)
	  filter_obj = filter(lambda x: x, name_list)
	  filter会将可迭代对象中的值遍历取出,然后通过判断,把条件成立 “过滤获取”出来的值添加到 filter对象中
	
name_list = ['egon_dsb', 'jason_dsb','sean_dsb', 'tank']	
filter_obj = filter(lambda name: name.endswith('_dsb'), name_list)  #filter_obj是一个filter对象
print(filter_obj)   #<filter object at 0x0000016CC5A5ED48>
print(list(filter_obj))  #转成列表
# print(tuple(filter_obj))  #['egon_dsb', 'jason_dsb', 'sean_dsb']