高阶函数
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)]
以上是关于高阶函数的主要内容,如果未能解决你的问题,请参考以下文章