Python系列教程(二十七):三个内建高阶函数

  一、高阶函数  

1、什么是高阶函数

    在前面的学习当中,其实已经接触过了高阶函数,今天可以给出一个正式的定义,满足以下两个条件之一,即是高阶函数。

    ① 函数的传参也需要是一个函数,如内建函数sorted()、filter()、map()

    ② 函数的返回值是一个函数,如装饰器函数(后面会学到)

2、排序函数:sorted()

    sorted()函数之前有学习到,但是当时在说明的时候,是忽略了其中一个‘key’参数的,这个参数可以接收一个自定义函数,指定排序规则。这里的自定义函数使用前面学的lambda来写就非常方便了。

    完整的格式:sorted(iterable[,key[,reverse]]) -> NewList

    说明:如果指定了key作为排序规则函数,那么sorted会从可迭代对象中取出每一个元素,作为参数传给key函数,函数拿到参数后会做运算处理,而sorted会按照运算处理后的结果的规则进行排序。

    注意:

        ① sorted只是排序作用,不会改变原来可迭代对象中的元素的值,不要以为指定了key函数后,是对运算处理后的结果进行排序,而只是根据他们的规则进行排序,最终返回的新列表,还是原可迭代对象的值。

        ② sorted只接受一个可迭代对象,所以key函数的参数也必须只有一个形参

#不指定排序规则
>>>sorted([-1,-2,-3,1,2,3]) 
[-3, -2, -1, 1, 2, 3]

#指定排序规则
>>>sorted([-1,-2,-3,1,2,3],key=lambda x:6-x) 
[3, 2, 1, -1, -2, -3]

3、过滤函数:filter()

    完整的格式:filter(function, iterable) -> Iterator

    说明:filter()函数的参数必须指定过滤函数作为过滤规则,filter会从可迭代对象获取每一个元素,送给指定的过滤函数作为参数,过滤函数拿到参数后会做运算处理,并且它的返回值最终会作为一个bool值进行判断,如果为‘True’,则满足条件,放到可迭代器中,如果为‘False’,则不满足条件,被过滤掉了。

    说明:filter只接受一个可迭代对象,所以function函数的参数也必须只有一个形参

>>>list(filter(lambda x:x > 3,(-1,23,4,0)))
[23, 4]

4、映射函数:map()

    完整的格式:map(function, *iterables) -> Iterator

    说明:map()函数的参数必须指定映射函数作为映射规则,map会从多个可迭代对象获取每一个元素,送给指定的映射函数作为参数,映射函数拿到参数后会做运算处理,处理后结果将成为可迭代对象的一个元素

    注意:

        ① 映射:所谓映射,就是一个值,通过映射条件,映射成另外一个值

        ② function函数的形参个数要和可迭代对象的数量一致,因为map函数会从每一个可迭代对象中获取一个元素,给function作为实参

        ③ 如果有多个可迭代对象,map()遵从木桶短板原理,在最短的可迭代对象取完元素为止,其他可迭代对象还有元素,也不会再做映射

#只有一个可迭代对象
>>>list(map(lambda x:x+10, range(5)))
[10, 11, 12, 13, 14]

#有多个可迭代对象,但是function只接受一个参数
>>>list(map(lambda x:x+10, range(5),range(10,20)))
TypeError: <lambda>() takes 1 positional argument but 2 were given

#可迭代对象的数量和function的形参保持一致
>>>list(map(lambda x,y:x+y, range(5),range(10,20)))
[10, 12, 14, 16, 18]
Jimmy's Blog ,版权所有丨如未注明,均为原创丨本网站采用BY-NC-SA协议进行授权,转载请注明转自:https://www.xjimmy.com/python-27-built_in.html

Leave a Comment