(三)3-4 Python的高阶函数和匿名函数

高阶函数:把函数当成参数传递的一种函数,例如

def add(x,y,f):
    return f(x) + f(y)
print(add(-8,11,abs))

运行结果:

19

注:
1、 调用add函数,分别执行abs(-8)和abc(11),并分别计算他们的值
2、最后做运算

map()函数
map()函数是python内置的一个高级函数,它接受一个函数f和一个list,并把list的元素以此传递给函数f,然后返回一个函数f处理完所有list元素的列表。例如

def f2(x):
    return x*x
l = [1,2,3,4,5]
print(map(f2,l))

运行结果:

[1, 4, 9, 16, 25]

注:1、l是一个list,把此list的元素传入函数f2,求每个元素的平方

    2、 把最终所有的计算结果合并成一个list。

reduce()函数

reduce()函数也是一个内置高阶函数,reduce()函数接收的参数和map()类似,一个函数f,一个list,和map()不同,reduce()传入的函数f必须接收2个参数,第一次调用是把list的前2个元素传递给f,第二次调用时,把两个list元素的计算结果当成一个参数,list的第三个元素当成第二个参数,传入f进行操作,以后一次类推,并返回最终结果。

def f(x,y):
    return x + y
print(reduce(f,[1,2,3,4,5],10))

运行结果:

25

注:上面运行过程1+2+3+4+5 最后10是一个默认值,最终在执行一次
传入的函数必须接受2个参数
把可迭代对象的前两个参数作为函数的实参,传入函数f中
把每次f运算的结果作为一个实参,可迭代对象的下一个元素作为另一个实参,传入函数f中
一次类推,最终得到结果

filter()函数

filter()函数接收一个函数f和一个list,这个函数f的作用是对每个元素进行判断,返回True或False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。例:

a = [1,2,3,4,5,6,7,8]
def is_odd(x):
    return x%2 == 1
print(is_odd(5))
print(filter(is_odd,a))

运行结果:

True
[1, 3, 5, 7]

注:
1、list的元素以此传入函数is_odd
2、is_odd判断每个元素是否符合条件,把符合条件的留下,不符合条件的舍弃
3、把最终所有符合条件的元素组成一个新的列表
函数每次把可迭代对象的元素传入进去,如果返回为true,则保留该元素,如果返回为false则不保留该元素

 sorted()函数 

sorted(...)
sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
对字典排序
按照value进行排序
dic = dict(a=1,b=10,c=3,d=9)
dic = dict(a=1,b=10,c=3,d=9)
print(sorted(dic.iteritems(),key=lambda d:d[1],reverse=False))
结果:[('a', 1), ('c', 3), ('d', 9), ('b', 10)]

匿名函数:没有名字的函数

lambda()函数是一种快速定义单行的最小函数,可用在任何需要函数的地方
普通函数:

def fun(x,y):
    return x*y
lambda函数:
r = lambda x,y:x*y
print(r(2,3))
print(type(r))

运行结果:

6
<type 'function'>
原文地址:https://www.cnblogs.com/pythonlx/p/7775148.html