高阶函数和匿名函数
- 高阶函数定义
- 匿名函数:lambda
- 高阶函数:filter( ) 函数和 map( ) 函数
- 高阶函数:sort( ) 和 sorted( ) 的key条件排序
# 高阶函数
# 接收函数作为参数,或者将函数作为返回值的函数
# 当我们使用函数作为参数时,实际上是将指定代码传递进了目标函数
l = [1,2,3,4,5,6,7,8,9,10]
def fn1(n) :
if n%2==0 :
return True
return False
def fn2(n) :
if n>5 :
return True
return False
def fn3(n) :
if n<7 :
return True
return False
def fn( a:list,func ) ->list :
'''
将列表中的偶数获取出来,返回到一个新列表中
参数:
a : 要筛选的列表
'''
b=[ ]
for i in a :
if func(i) :
b.append( i )
return b
print( fn( l,fn1 ) )
print( fn( l,fn2 ) )
print( fn( l,fn3 ) )
# filter( ) 过滤函数
# 从序列中过滤出符合条件的元素,保存到一个新序列中
# 参数:
# 1. 一个函数(lambda,def...),根据该函数条件来进行过滤(可迭代结构)
# 2. 需要过滤的函数(list...)(可迭代函数)
# 返回值:
# 过滤后的新序列(可迭代函数):<filter object at 0x01A8E870>
print( filter(fn1,l) )
print( list(filter(fn1,l)) )
# 匿名函数 lambda 函数表达式(语法糖)
# 该函数是用来创建一些简单的函数,一般作为参数使用
# 语法:
# lambda 参数列表 : 返回值(返回值不用加return,直接写)
lambda a,b : a+b
# 不常用的用法:
# 调用时 (lambda a,b : a+b)(10,20)
# 赋值给变量 fn5 = lambda a,b : a+b
print( list( filter( lambda n : n>5 ,l ) ) )
# lambda 在使用完就会释放内存
# map( )
# 对可迭代对象中的所有元素做指定操作,添加到新的序列中并返回
# 参数:
# 1. 一个函数(lambda,def...),根据该函数条件来进行指定操作(可迭代结构)
# 2. 需要做操作的的函数(list...)(可迭代函数)
# 返回值:
# 操作后的新序列(可迭代函数):<map object at 0x0152E890>
l = [1,2,3,4,5,6,7,8,9,10]
r = map( lambda i : i*3 , l )
print( list(r) )
# sort( )
# 对列表进行排序,默认直接比较元素的大小
# 在sort( )可以接收一个关键字参数,key
# key需要一个函数作为参数,当设置了函数作为参数
# 每次都会以列表中的一个元素作为参数调用函数,并使用函数的返回值来比较元素的大小
li = ['sssss','gffg','ii','ttt']
li.sort( key = len )
print(li)
li = [4,6,2,'1',3,'5']
li.sort( key = int )
print(li)
# sorted( )
# 用法和sort( )基本一致,但sorted可以对任意序列进行排序
# 使用sorted( )不会影响原来的对象,而是返回一个新的对象
d = {'4':2,'6':7,5:8}
print( sorted(d,key = int) )
t = ('dfgsa','tr','arr')
print( sorted(t,key = len) )