一.什么是匿名函数
顾名思义,没有名字。适用于简单的业务逻辑
二.匿名函数的声明
使用lambda 声明
变量 = lambda 参数 : 逻辑代码
变量(参数)
三.三目运算
表达式1 if 条件 else 表达式2
如果条件成立,表达式1就作为整个表达式的结果,反之,表达式二为整个表达式的结果。
四.匿名函数使用方式
4.1 lanbda与三目运算的结合使用
compare = lanbda x,y :x if x>y else y
compare(8,9)
4.2 给def函数中的lambda传参
def 函数无参数
def main():
return lambda x : True if x==10 else False
main()(10)
def 有参数
def main(num1,num2,num3):
return lambda x : x+num1+num2+num3
total = main(10,20,30)(40)
4.3 匿名函数传入def函数
str_list = ['Python基础', 'Java基础', 'Python爬虫', 'Java Web', ]
def main(keys, func):
result_list = []
for result in keys:
if func(result):
result_list.append(result)
return result_list
condition = lambda x: True if 'Python' in x else False
print(main(str_list, condition))
五.与匿名函数结合的常用函数
5.1 map(function,sequence)
data = [1,2,3,4]
def func(n):
return n+1
print(list(map(func,data)))
print(list(map(lambda n : n+1,data)))
- 参数顺序:方法/表达式,可迭代对象
- 对可迭代对象中每个数据进行函数规定的操作
- 返回的结果是迭代器,用list转一下在调用
- 函数为传统函数调用时不要加()
5.2reduce(function,sequence)
引入:from functools import reduce
from functools import reduce
data = [1, 2, 3, 4]
def func(x, y):
return x + y
print(reduce(func,data))
print(reduce(lambda x, y: x + y, data))
- 参数顺序:方法/表达式,可迭代对象
- 每次取两个数进行运算,可迭代对象中数据越来越少
5.3sorted(iterable,key=None,reverse=False)
data = {'李彤':480, '苏丹':520,'王梅':340, '赵夏伟':555 }
print(sorted(data.items(), key=lambda d: d[1], reverse=True))
- 对可迭代对象进行排序,不影响原数据
- 返回的排序是列表嵌套元组,可用dict()转回字典
- iterable:可迭代数据类型列表,字典
- key:是否基于某一个元素排序
- reverse:是否反转,默认false升序,反之降序
- 如果基于的条件不是一个,key=lambda d: (d[0],d[1])
5.4filter(function,sequence)
data = [1, 2, 3, 4]
print(list(filter(lambda x : x>2,data)))
- 参数顺序:方法/表达式,可迭代对象
- 根据条件过滤
- 函数返回类型需要为布尔
- filter返回的结果为迭代器,转list调用
|