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

 

posted @ 2018-09-03 16:54  小猪猪猪  阅读(215)  评论(0)    收藏  举报