高阶函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高阶函数相关的知识,希望对你有一定的参考价值。

高阶函数

高阶函数就是把函数当做参数传入的一种函数,如下,把 abs() 这个内置函数传入到自定义的函数中,先求绝对值再相加:

In [2]: def fun(x, y, f):

   ...:     return f(x) + f(y)

   ...: 


In [3]: fun(-2,12,abs)             #abs是内置函数,传递一个内置函数-绝对值

Out[3]: 14


技术分享图片


Python 内置的高阶函数有:map() 、reduce() 、filter() 、sorted()

map() 函数:

格式:

map(function, iterable, ...)

  • function -- 函数,有两个参数

  • iterable -- 一个或多个序列

In [7]: def fun(x):

   ...:     return x + x

In [8]: list1=[1,2,3,4]

In [9]: map(fun,list1)

Out[9]: [2, 4, 6, 8]


In [14]: list2=[-11,-2,0,1]

In [15]: map(abs,list2)

Out[15]: [11, 2, 0, 1]


技术分享图片


技术分享图片


reduce() 函数:

reduce() 接收两个参数,第一个是函数(这个函数必须定义两个形参),第二个是序列,第一次执行时,先将序列中的前两个元素交给函数处理;第二次执行时,将前面的处理结果和序列中的第三个元素交给函数处理,以此类推。如下,先定义一个函数 add() ,当我们执行 reduce(add, [1, 2, 3, 4, 5]) 时,执行流程如下:

先将 1 和 2 交给 add() 函数处理,得到结果 3

再将 3 与 3 交给 add() 函数处理,得到结果 6

再将 6 与 4 交给 add() 函数处理,得到结果 10

再将 10 与 5 交给 add() 函数处理,得到结果 15

其实就是相当于 1 + 2 + 3 + 4 + 5

In [22]: def add(x,y):

    ...:     return x + y

    ...: 


In [23]: reduce(add,[1,2,3,4,5])

Out[23]: 15

In [26]: reduce(add,range(0,101))

Out[26]: 5050


filter() 函数:

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。

该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

以下是 filter() 方法的语法:

filter(function, iterable)

参数

function -- 判断函数。

iterable -- 可迭代对象。

返回值

返回列表。

实例:

过滤出列表中的所有奇数:

技术分享图片


技术分享图片


math方法:

In [36]: math.pow(2,3)             #返回x 的 y次方

Out[36]: 8.0


In [38]: math.sqrt(100)             #返回100的平方根,即10的平方就是100,那10就是100的平方根

Out[38]: 10.0

In [39]: math.sqrt(10)

Out[39]: 3.1622776601683795


In [40]: math.floor(5.9)            #返回不大于x(小于等于x)的一个整数

Out[40]: 5.0


In [46]: math.fabs(-123)           #返回x的绝对值

Out[46]: 123.0


In [47]: math.fmod(10,3)          #x%y 取余数

Out[47]: 1.0


sorted() 

sorted() 函数对所有可迭代的对象进行排序操作。

sort 与 sorted 区别:

sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。

list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。

语法

sorted 语法:

sorted(iterable[, cmp[, key[, reverse]]])

参数说明:

iterable -- 可迭代对象。

cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。

key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。

reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

实例:

In [59]: L=[('b',2),('a',1),('c',3),('d',4)]

In [60]: sorted(L,key=lambda x:x[1])                       #lambda 为匿名函数,x为参数,将L传递给x,然后取出x[1] 作为排序处理

Out[60]: [('a', 1), ('b', 2), ('c', 3), ('d', 4)]


In [62]: students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]

In [63]: sorted(students,key=lambda x:x[2],reverse=False)                    #reverse=False 这个是升序

Out[63]: [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]


以上是关于高阶函数的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin的高阶函数和常用高阶函数

Kotlin小知识之高阶函数

高阶函数

高阶函数

高阶函数:声明实现(定义)与调用

函数高阶函数