匿名函数
一、匿名函数
匿名函数的定义
匿名函数就是没有名字的函数,用于临时使用一次的场景,用完该内存就会被回收,更多的是将它与其它函数配合使用
def foo(x,y): # foo为函数名 x,y为参数
return x+y # 函数体代码
lambda x,y:x+y. # 匿名函数没有函数名直接写作一行
# 也没有return 直接返回该函数体代码的值
# 也可以将匿名函数赋值给变量名,赋值后变量名加括号就会触发函数体代码的运行,但这样就没了匿名函数的意义
匿名函数的应用
info = [{'name': 'egon', 'sex': 'male', 'age': '18', 'salary': '3000'}, {'name': 'alex', 'sex': 'male', 'age': '38', 'salary': '30000'}, {'name': 'wupeiqi', 'sex': 'female', 'age': '28', 'salary': '20000'}, {'name': 'yuanhao', 'sex': 'female', 'age': '28', 'salary': '10000'}]
# 1、取出薪资最高的人的信息
# 那肯定用到max函数 但max对字典肯定是不能直接比较的
# 首先定义个函数
def func(info):
return info[salary] # 返回需要对比的值,salary的值
# 但是这个函数我们只是临时使用一次,那我们就可以将它变成匿名函数临时使用一下==>lambda info: info['salary']
print(max(info,key=lambda info: info['salary']))
# key赋值是max的内置用法
# 输出结果为 {'name': 'alex', 'sex': 'male', 'age': '38', 'salary': '30000'}
print(max(i['salary'] for i in info)) # 取出工资
# 2、取出最年轻的人的信息
print(min(info, key=lambda info: info['age']))
print(min(i['age'] for i in info)) # 取出最小年龄
map、filter 和 reduce
map() 会根据提供的函数对指定序列做映射
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表
# map()函数语法
map(function,iterable,...)
# function--函数 iterable--一个或多个序列
map() 应用
# python2返回的是列表 python3返回的是一个迭代器这时候需要list
list(map(lambda x: x ** 2, [1, 2, 3, 4, 5])) # 计算列表各个元素的平方
# 输出结果 [1, 4, 9, 16, 25]
list(map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])) # 提供了两个列表,对相同位置的列表数据进行相加
# 输出结果 [3, 7, 11, 15, 19]
names = ['lxx', "hxx", "wxx"]
map(lambda name:name+"_vip",names)
# 将names列表后面加上"_vip" 输出为新列表
filter()函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表
该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中
# filter 函数语法
# python2返回的是列表 python3返回的是一个迭代器
filter(function,iterable)
# function--判断函数 iterable--可迭代对象
filter()应用
# 过滤列表中所有的奇数
l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
def is_odd(n): # 判断函数
return n % 2 == 1
# 变成匿名函数 lambda n:n % 2 == 1
list(filter(lambda n:n % 2 ==1,l))
# 输出结果[1, 3, 5, 7, 9]
# 过滤列表中以‘_vip’结尾的
names = ['lxx', "hxx_vip", "wxx_vip"]
list(filter(lambda name:name.endswith('_vip'),names))
reduce()函数会对参数序列中元素进行累积
函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果
# Python3.x reduce() 已经被移到 functools 模块里,如果我们要使用,需要引入 functools 模块来调用 reduce() 函数
# 语法
from functools import reduce
reduce(function, iterable[, initializer])
# function -- 函数,有两个参数
# iterable -- 可迭代对象
# initializer -- 可选,初始参数
reduce()应用
reduce(lambda x, y: x+y, [1,2,3,4,5]) # 计算列表和
# 输出结果为 15
面向过程编程思想
面向过程的编程思想:核心是 “过程” 二字,过程即流程,指的是做事的步骤:先做什么,再做什么,后做什么,基于该思想编写程序就好比在设计一条流水线
优点:复杂的问题流程化、进而简单化
缺点:扩展性非常差,牵一发而动全身
面向过程的编程思想应用场景解析:
1、不是所有的软件都需要频繁更迭:比如编写脚本
2、即便是一个软件需要频繁更迭,也不并不代表这个软件所有的组成部分都需要一起更迭