python3 匿名函数和高阶函数
1.首先是匿名函数:匿名函数就是不需要显式的指定函数
匿名函数主要是和其它函数搭配使用
lambda x:x+1
x:参数
x+1:函数体
注意:默认就是return,用的时候取个变量名(哈哈哈,好用)
2.高阶函数:
满足两个特性任意为一个即为高阶函数
(1)函数的传入参数是一个函数名;
(2)函数的返回值是一个函数名。
map函数,用法map(f,Inerator)
f表示一个函数,Inerator表示一个迭代器,类似[1,2,3]这种可被for循环访问的,其效果为对迭代器中每一个值都执行f函数的操作,
并返回一个迭代器,返回的迭代器可使用一个变量接住,后对该迭代器迭代即可取出其中的元素,也可使用list函数list(map(f,Inerator))这样就成为列表.
【在下列用的是匿名函数】
【
处理序列中的每个元素,得到的结果是一个‘列表’,该‘列表’元素个数及位置与原来一样
】。
num_l=[3,23,45,1,5]
def map_test(func,array):
ret=[]
for i in array:
res=func(i)
ret.append(res)
return ret
print(map_test(lambda x:x+1,num_l))
res=map(lambda x:x+1,num_l)
print('内置函数map,处理结果',res)
msg='WEzxfdeq'
print(list(map(lambda x:x.upper(),msg)))
#
[4, 24, 46, 2, 6]
内置函数map,处理结果 <map object at 0x00000000023CDCC0>
['W', 'E', 'Z', 'X', 'F', 'D', 'E', 'Q']
2.filter函数:
筛选.filter(f,Inerator)差不多,对迭代器中的元素执行f操作,如果返回结果为真,则留下,反之丢掉,和map相同,它返回也是迭代器.
【
filter遍历序列中的每个元素,判断每个元素得到布尔值,如果是True则留下来
】
people=[
{'name':'a','age':1000},
{'name':'w','age':10000},
{'name':'y','age':9000},
{'name':'s','age':18},
]
print(list(filter(lambda p:p['age']<=10,people)))
#[]
people=[
{'name':'a','age':1000},
{'name':'w','age':10000},
{'name':'y','age':9000},
{'name':'s','age':18},
]
print(list(filter(lambda p:p['age']<=18,people)))
#[{'age': 18, 'name': 's'}]
3.reduce函数:
在Python 3里,reduce()函数已经被从全局名字空间里移除了,它现在被放置在fucntools模块里 用的话要 先引 入:
reduce函数,reduce函数会对参数序列中元素进行累积。
reduce函数的定义:
reduce(function, sequence[, initial]) -----> value
function参数是一个有两个参数的函数,reduce依次从sequence中取一个元素,和上一次调用function的结果做参数再次调用function。 第一次调用function时,如果提供initial参数,会以sequence中的第一个元素和initial作为参数调用function,否则会以序列sequence中的前两个元素做参数调用function。
【注意function函数不能为None。】
from functools import reduce
print(reduce(lambda x,y:x+y,range(0,1),100))
print(reduce(lambda x,y:x+y,range(1,101)))
#100
#5050

浙公网安备 33010602011771号