三周四次课(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函数的时候,直接传入参数就可以了。