学习高阶函数之前,需要先搞清楚
变量可以指向一个函数,函数名其实就是指向函数的变量
>>> f = abs
>>> f
<built-in function abs>
>>> f(-10)
10
>>>
高阶函数
能接收函数做参数的函数。
变量可以指向函数,函数的参数可以接收变量;
一个函数可以接收另一个函数作为参数;
能接收函数作为参数的函数就称之为高阶函数。
>>> def fun(x,y,f):
... return f(x)+f(y)
...
>>> result = fun(-5,7,abs)
>>> result
12
>>>
下面记录几个python中内置的高阶函数(使用频率相对较高)。
map(f,*iter)函数:必须接收一个f和一个list,根据提供的函数对指定序列做映射。
例:将列表中的元素统一改为首字母大写,其余字母小写。
def format_name(s):
return s[0].upper() + s[1:].lower()
print map(format_name, ['adam', 'LISA', 'barT'])
reduce(f,*args)函数:必须接收一个f和一个list,对序列的每个元素反复的调用函数,做累计操作。
例:对列表的每个元素做累加操作
def prod(x, y):
return x+y
print reduce(prod, [2, 4, 5, 7, 12]) # 2+4+5+7+12
print reduce(prod,[1,3,5,7,9],100) # 100+1+3+5+7+9
filter(f,*args)函数:必须接收一个f和一个list,对list中的元素进行过滤操作,list中元素不符合函数的要求的过滤掉,返回满足函数要求的元素组成一个新的list返回。
例:返回0-100中平方根是整数的数,不是整数的过滤掉
import math
def is_sqr(s):
r = int(math.sqrt(s))
return r*r == s
print filter(is_sqr,range(1,101)) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
sorted()函数:实现升序排序
>>> sorted([1,5,4,2,2,8,4])
[1, 2, 2, 4, 4, 5, 8]
sorted()函数也可以实现自定义排序,此时就是一个高阶函数。它可以接收一个比较函数cmp来实现自定义排序,比较函数的定义是,传入两个待比较的元素 x, y,如果 x 应该排在 y 的前面,返回 -1,如果 x 应该排在 y 的后面,返回 1。如果 x 和 y 相等,返回 0。(如果想要实现倒序则反之)
sorted(list,f)函数:对list实现按照f函数指定的排序规则排序。
例:实现对字符串忽略大小写进行排序。
def ignore_case(s1,s2):
u1=s1.upper()
u2=s2.upper()
if u1>u2:
return 1
if u1<u2:
return -1
return 0
print sorted(['bob', 'about', 'Zoo', 'Credit'],ignore_case) # ['about', 'bob', 'Credit', 'Zoo']
例:对list中的值实现倒序排序。
def reversed_cmp(x,y):
if x>y:
return -1
if x<y:
return 1
return 0
print(sorted([1,2,3,4,5],reversed_cmp)) # [5, 4, 3, 2, 1]