一、高阶函数
把函数作为参数传入,这样的函数成为高阶函数,函数式编程就是指这样高度抽象的编程范式 。
高阶函数:
实参:可以是一个函数的函数名;
返回值:可以是一个函数的函数名。
(一)内置高阶函数map()
map()函数会根据提供的函数对指定的序列做映射。其语法如下:
map(function, iterable, ...) #function --函数 iterable --一个或多个序列
第一个参数function以参数序列中的每一个元素调用function函数,返回包含每次function函数的返回
值的新列表(python2)或迭代器(python3)
def fun(x):
return x**2
print(list(map(fun,range(1,10)))) #将一个存储0~9的列表的每一个元素平方
输出:
[1, 4, 9, 16, 25, 36, 49, 64, 81]
当function函数拥有两个参数时,map()函数的可迭代的对象也就需要两个参数
def fun_1(x,y):
return x+y
print(list(map(fun_1,range(1,11),range(1,11)))) #计算两个列表每个元素相加的和
输出:
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
(二)内置高阶函数reduce()
Python2中reduce()函数在全局名字空间中,可以直接使用,在Python3中已经从全局名字空间中移除
了,被放置在function模块里面,如果想要使用它,则需要通过引入functools模块来调用reduce()函数。
from functools import reduce
reduce()函数的语法如下:
reduce(function,iterable[,initializer]) function--函数, iterable --可迭代对象 , initializer --可选,初始参数.
redeuce()函数会对参数序列中的元素进行累积,函数讲一个数据集合(链表,元组)中的所有有数据进行
下列操作:用传给reduce中的函数function(必须有两个参数)先对集合中的1,2个元素进行操作,在将得到的
结果与第三个数据用function函数运算,最后得到一个结果。
from functools import reduce
def add(x,y):
return x+y
print(reduce(add,range(1,11))) #((((1+2)+3)+4)+5)+6)+... 计算1~10的元素之和.
输出:
55
(三)内置高阶函数filter()
filter()函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表,该函数接收
两个参数,第一个为函数,第二个为序列序列的每个元素作为参数传递给函数进行判断,然后返回True或
Fase,最后将返回True的元素放到新的列表中。
filter(function,iterable) #function --判断函数 , iterable -- 可迭代的对象
例子:
def chose_odd(num):
return (num % 2 == 0)
print(list(filter(chose_odd,range(1,11))))
输出:
[2, 4, 6, 8, 10]
注意:
关于filter()方法,在python2和python3中有所不同,python2中返回的是过滤后的列表, 而python3
中返回到是一个filter类,filter类实现了__iter__和__next__方法, 可以看成是一个迭代器, 有惰性运算的特性,
相对python2提升了性能, 可以节约内存.
(四)内置高阶函数sorted()
sorted(iterable, [,cmp[,key[,reverse]]])