高阶函数:就是把函数当成参数传递的一种函数,例如:
def add(x,y,f):
return f(x) + f(y)
print(add(-8,11,abs))
结果:19
解释:
1.调用add函数,分别执行abs(-8)和abs(11),分别计算出他们的值
2.最后再做和运算
map()函数
map函数时Python内置的一个高阶函数,它接受一个函数f和一个list,并把list的元素以此传递给函数f,然后返回一个函数f处理完所有list元素的列表,如下所示:
def f2(x):
return x*y
l = [1,2,3,4,5,6]
print(map(f2,l))
结果:
[1,4,9,26,25,36]
解释:
1.l是一个list,把此list的元素传入函数f2,求每个元素的平方
2.把最终所有的计算结果合并成一个新的list,就如新的结果所示:
reduce()函数
reduce()函数也是Python内置的一个高阶函数,reduce()函数接收的参数和map()类似,一个函数f,一个list,但行为和map()不同,reduce()传入的函数f必须接收两个参数,第一次调用是把list的前两个元素传递给f,第二次调用时,就是把前两个list元素的计算结果当成第一个参数,list的第三个元素当成第二个参数,传入f进行操作,以后以 以此类推,并返回最终结果值。
例子如下所示:
def f(a,b)
return a + b
print(reduce(f,[1,2,3,4,5],10) #f后面是列表
结果:25
解释:
1.计算a = f(1,2)的值为3
2.计算b = f(a,3)的值为6
3.计算c = f(b,4)的值为10
4.计算d = f(c,5)的值为15
5.计算f = d(d,10)的值为25
其实就是相当于1+2+3+4+5+10,最后的10是一个默认值,及最终再执行一次。
filter()函数
filter英文单词就是过滤的意思,filter()函数就是Python内置的另一个有用的高阶函数,filter()函数接收一个函数f和一个list,这个函数f的作用是对每个元素进行判断,返回True或False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。例子如下:
def is_odd(x):
return x % 2 == 1
print(filter(is_odd,[1, 2, 3, 4, 5, 6, 7]))
结果:[1,3,5,7]
解释:
1.list的元素以此传入到函数is_odd
2.is_odd判断每个元素是否符合条件,把符合条件的留下,不符合条件的舍弃
3.把最终所有符合条件的元素组成一个新的列表
#高阶函数map()函数,第一个函数为自定义函数,第二个参数为一个迭代对象
l = [1, 2, 3, 4, 5] #把此处[]改为()最终结果还是一个列表,map的返回值还是一个列表
def f2(x):
return x*x
m = map(f2,l)
print(type(m))
print(‘#‘*50)
print(m)
#reduce()函数
# 传入的函数必须接收两个参数,把可迭代对象的两个参数作为函数的实参,传入到f函数中
# 把每次f运算的结果作为第一个实参,可迭代对象的下一个元素作为另一个实参,传入函数f中
# 以些类推,最后得到结果
print(‘#‘*50)
def f(a,b):
return a + b
print(reduce(f,[1, 2, 3, 4, 5], 10)) #f后面是列表,
print(‘#‘*50)
#filter()函数
#每次把可迭代对象的元素传入进去,如果返回为True,则保留该元素,如果返回为False,则不保留该元素
c = [1, 2, 3, 4, 5, 6, 7, 8]
def is_odd(x):
return x % 2 == 1
print(filter(is_odd,c))
打印结果为:
匿名函数:没有名字的函数,那为什么要设立匿名函数,它有什么作用呢?lambda函数是一种快速定义单行的最小函数,可以用在任何需要函数的地方
常规版本:
def fun(x,y)
retrun x*y
lambda版本:
r = lambda x,y:x*y
print(r(2,3))
print(type(r))
结果:6
#匿名函数,用的不是太多,
def sum(x,y):
return x+y
m = lambda x,y:x+y
print(m)
print(‘#‘*20)
print(m(4,5))
#sorted()是高阶涵数
#对字典进行排序
mm = dict(a=1, c=3, b=10, d=9)
print(‘#‘*20)
print(mm)
for i in mm:
print i
print(‘#‘ * 20)
for j in mm.iteritems():
print(j)
print(‘#‘*20)
test = sorted(mm.iteritems(),key=lambda d: d[1])
print(test)
打印结果为: