之前定的函数都是有名函数,它是基于函数名使用。
def func():
print('from func')
func()
func()
func()
print(func)
from func
from func
from func
<function func at 0x10518b268>
匿名函数,他没有绑定名字,使用一次即被收回,加括号既可以运行。
语法:
lambda 参数列表 : 表达式
说明
匿名函数调用
步骤一:将创建好的匿名函数通过一个变量来去接收。
步骤二:使用变量再去调用匿名函数。
lambda x, y: x+y
<function main.
res = (lambda x, y: x+y)(1, 2)
print(res)
print((lambda: 1 + 1)())
3
2
匿名函数通常与max()、sorted()、filter()、sorted()方法联用。
salary_dict = {
'randy': 3000,
'laowang': 100000,
'bar': 5000,
'cheer': 2000
}
如果我们想从上述字典中取出薪资最高的人,我们可以使用max()方法,但是max()默认比较的是字典的key。
首先将可迭代对象变成迭代器对象
res=next(迭代器对象),将res当做参数传给key指定的函数,然后将该函数的返回值当做判断依据
def func(k):
return salary_dict[k]
print(f"max(salary_dict, key=func()): {max(salary_dict, key=func)}")
print(
f"max(salary_dict, key=lambda name: salary_dict[name]): {max(salary_dict, key=lambda name: salary_dict[name])}")
max(salary_dict, key=func()): (‘laowang‘, 100000)
max(salary_dict, key=lambda name: salary_dict[name]): (‘laowang‘, 100000)
如果我们想对上述字典中的人,按照薪资从大到小排序,可以使用sorted()方法。
lis = [1, 3, 2, 5, 8, 6]
sorted(lis)
print(f"lis: {lis}")
print(f"sorted(lis,reverse=True): {sorted(lis,reverse=True)}")
lis: [1, 3, 2, 5, 8, 6]
sorted(lis,reverse=True): [8, 6, 5, 3, 2, 1]
print(
f"sorted(salary_dict, key=lambda name: salary_dict[name]):
{sorted(salary_dict, key=lambda name: salary_dict[name])}" # 根据value来排序
)
sorted(salary_dict, key=lambda name: salary_dict[name]): [‘cheer‘, ‘randy‘, ‘bar‘, ‘laowang‘]
如果我们想对一个列表中的工资加薪,可以使用map()方法。
print(list(map(lambda name: salary_dict[name] + 2000, salary_dict)),11)
[5000, 102000, 7000, 4000]
3.4 filter()
如果我们想筛选除薪资小于5000,我们可以使用filter()方法。
filter()工作原理:
print(list(filter(lambda i: i[1] < 5000, salary_list)))
print(list(filter(lambda name: salary_dict[name] < 5000, salary_dict)))
[(‘randy‘, 3000), (‘cheer‘, 2000)]
[‘randy‘, ‘cheer‘]
def sorted(iter, key=None, reverse=None):
iter.sort()
if key:
# key 是一个函数对象
lt = []
lt2 = []
for i in iter:
res = key(i)
lt.append(res)
lt2.append(i)
lt.sort()
lt3 = []
for i in lt:
for j in lt2:
if j[1] == i:
lt3.append(j)
if reverse:
lt3.reverse()
return lt3
if reverse:
iter.reverse()
return iter
salary_list = list(salary_dict.items())
print(salary_list)
print(sorted(salary_list, key=lambda i: i[1], reverse=None))
原文:https://www.cnblogs.com/randysun/p/12242694.html