首页 > 技术文章 > 匿名函数与内置函数

Mr-shen 2019-11-14 21:02 原文

匿名函数

无名字的函数 用lambda :表示

:左边是参数,右边是返回值

函数的调用时需要函数名+()因为匿名函数没有名字,所以没法调用只能一次性使用

匿名函数单独使用没有意义,需要配合内置函数一起使用才有意义

内置函数

python内部提供的内置方法,如:print(), len(), range(), max(), min(), sorted(), map(), filter()

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

    字符串比较的是ASCII

# 求列表l1中的最大值
l1 = [10, 2, 5, 1, 4]
print(max(l1))
# 求字典中薪资最高的人
dict1 = {
    'tank': 1000,
    'egon': 500,
    'sean': 200,
    'jason': 800
}
print(max(dict1, key=lambda x:dict1[x]))
>>>
tank
  • min(可迭代对象) 求最小值

    字符串比较的是ASCII

# 求字典中薪资最低的人
dict1 = {
    'tank': 1000,
    'egon': 500,
    'sean': 200,
    'jason': 800
}
print(min(dict1, key=lambda x:dict1[x]))
>>>
sean
  • sorted():默认升序(从小到大),reverse反转,默认reverse=False
# 将字典中薪资排序
dict1 = {
    'tank': 1000,
    'egon': 500,
    'sean': 200,
    'jason': 800
}
# 升序
print(sorted(dict1, key=lambda x: dict1[x]))
# 降序
print(sorted(dict1, key=lambda x: dict1[x], reverse=True))
  • map() :映射

    语法:map(函数地址,可迭代对象) ---->>得到map对象

map会将可迭代对象中的值遍历取出,然后按照指定的规则映射到一个map对象中

可以将map对象转换到列表或者元组中,只能转一次

res = map(lambda x: x, range(5))
print(res) # 得到map对象>>>><map object at 0x000001374A5C13C8>
print(list(res)) # 将map对象放到列表中>>>[0, 1, 2, 3, 4]
print(tuple(res)) # 只能转一次>>>()
# 将list1中tank后缀加上"_生蚝",其他元素中后缀加上"DS"
list1 = ['tank', 'jason', 'sean', 'egon']
res = map(lambda x: x+'生蚝' if x == 'tank' else x + 'DS', list1)
# res是map对象
print(tuple(res))
>>>
('tank生蚝', 'jasonDS', 'seanDS', 'egonDS')
  • reduce():合并

    需要从functools包中调用from functools import reduce

    语法:reduce(函数地址,可迭代对象,初始值默认为None)

    将可迭代对象的值两两进行合并,并初始值可以修改

from functools import reduce # 调用reduce模块
# 求0-5的和
# 普通方法
num = 0
for i in range(5):
    num += i
print(num)
# reduce方法
res = reduce(lambda x, y: x+y, range(5)) # 初始值默认为None
print(res) # 10
res = reduce(lambda x, y: x+y, range(5),100) # 初始值为100
print(res) # 110
res = reduce(lambda x, y: x*y, range(1, 5)) # 初始值默认为None
print(res) # 24
  • filter():过滤

    语法:filter(函数地址,可迭代对象) ----->>得到filter对象

    将可迭代对象中的值遍历取出,然后通过判断,filter会将函数中返回的结果为True 对应 的参数值 “过滤出来”,添加到filter对象中

    可以将filter对象转换到列表或者元组中,只能转一次

# 将结尾是DS的名字过滤出来
t = ('tank生蚝', 'jasonDS', 'seanDS', 'egonDS')
res = filter(lambda x:x.endswith('DS'), t) # filter对象
print(res) # filter对象<filter object at 0x00000240FD29CA08>
print(list(res)) # 将filter对象转到列表中['jasonDS', 'seanDS', 'egonDS']

推荐阅读