高阶函数的定义:
一个函数可以接受另外一个函数当作参数,这样的函数成为高阶函数
比如一个简单的例子:
求两个数绝对值的和,重写一下add函数:
def add(a,b,f): #f是一个在调用时写入abs的函数
return f(a)+f(b) #返回的值时a和b绝对值的和
我们这个在调用是 就可以这样写:add_num=add(-5,6,abs)
返回的值为5+6的值即add_num=11 如果我们在调入是写入其他的函数则可以进行其他的运算。
这个时候add函数就是一个高阶函数。
高阶函数map:
map函数是python内置的高阶函数它接受两个参数:第一个是函数,第二个是一个iterable对象。将第一个的函数作用于第二个iterable的每一个元素中,返回一个新的iterable。
iterable对象就是一个每次能够返回它的一个元素的,也就是可以迭代的对象。
在python中有很多内置iterable对象如:str:字符串 、touple:元组 、list:列表 、dict:字典.等等
下面写一个map函数的基础运用:
#map函数的训练
def f(x): #返回一个数平方
return x*x
list=[1,2,3,4,5,6,7,8,9,10,11]
list1=map(f,list)
for x in list1:
print(x,end=',')
注意:这里再调用函数时,仅仅是输入该函数的名字并不需要加上()!!!注意map函数返回的是一个map类型的对象,只是一个可以迭代的对象,能用for循环去遍历,不可以用下标去访问,编译器会报错的。
高阶函数reduce:
reduce函数和map函数语法基本相同,不过reduce函数是将一个iterable对象内前一个reduce结果累加到下一个元素中,求的是累加。注意:在python3.x之后reduce被移出内建函数,加入functools模块。想要调用时 from functools import reduce 才能正常使用。
写一个1-10之间奇数的reduce
from functools import reduce##注意 再python3.x之后reduce函数被移出内建函数,放入functools模块
def ad(x, y):
return x + y
print(reduce(ad, [1, 3, 5, 7, 9]))
filter函数:
filter函数也像上两个语法一样,不过filter函数是用来根据第一个函数的返回值的布尔类型来确定这个元素是否保存。
比如过滤一个列表中奇数,让其只输入偶数。
l=[1,10,8,4,11,16,5,4]
def is_odd(x):
return x%2==0
print(list(filter(is_odd,l)))
sorted函数:
sort函数是对一个list排序并输出结果 默认为升序排列 如果在后变加入属性reverse=True则变为降序排列。
l=[1,10,8,4,11,16,5,4]
print(sorted(l))
print(sorted(l,reverse=True))