学习笔记(11月02日)--高阶函数

时间:2021-08-22 11:47:44

三周四次课(11月2日)


1.高阶函数

高级函数就是把函数当成参数传递的一种函数:例如:

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 * xl = [1, 2, 3, 4, 5, 6]print(map(f2, l))

结果:


[1, 4, 9, 16, 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(x, y):    return x + yprint(reduce(f, [1, 2, 3, 4, 5], 10))

结果:

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,10)的值为25

其实就相当于1+2+3+4+10,最后的10是一个默认值,即最终在执行一次。


filter()函数

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

例子:


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

结果:

[1, 3, 5, 7]



解释:

1,list的元素以此传入到函数is_odd,

2,is_odd判断每个元素是否符合条件,把符合条件的留下,不符合条件的舍弃

3,把最终所有符合条件的元素组成一个新的列表


sorted()函数

sorted(...)

    sorted(iterable,cmp=None,key=None,reverse=True)

对字典进行排序:

按照value进行排序

mm = dict(a=1, b=10, c=3, d=9)print sorted(mm, iteritems(), key=lambda d: d[1], reverse=True)

作用:返回一个经过排序的列表。

第一个参数是一个iterable,返回值是一个对iterable中元素进行排序后的列表(list)。


可选的参数有三个,cmp、key和reverse:

1)cmp指定一个定制的比较函数,这个函数接收两个参数(iterable的元素),如果第一个参数小于第二个参数,返回一个负数;如果第一个参数等于第二个参数,返回零;如果第一个参数大于第二个参数,返回一个正数。默认值为None。


2)key指定一个接收一个参数的函数,这个函数用于从每个元素中提取一个用于比较的关键字。默认值为None。


3)reverse是一个布尔值。如果设置为True,列表元素将被倒序排列。

key参数的值应该是一个函数,这个函数接收一个参数并且返回一个用于比较的关键字。对复杂对象的比较通常是使用对象的切片作为关键字。

例如:

students = [('john', 'A', '15'), ('jane', 'B', '12'), ('dave', 'B', '10')]print(sorted(students, key=lambda s: s[2]) ) # 按年龄排序

结果:

[('dave', 'B', '10'), ('jane', 'B', '12'), ('john', 'A', '15')]


2.匿名函数

匿名函数就是没有名字的函数。lambda函数是一个快速定义单行的最小函数,可以用在任何需要函数的地方

常规版本:

def fun(x, y):    return x * y

lambda版本:

r = lambda x, y: x * yprint(r(2, 3))print(type(r))

结果:

6<type 'function'>

解释:

我们可以看到,r其实是一个函数模型,当我们使用r函数的时候,直接传入参数就可以了。