什么是高阶函数?
高阶函数:一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归),满足其一则为高阶函数。
函数作为参数
1 2 3 4 5 6 7 8 9 10 11
| def func(): print('这是第一个函数')
def func_two(func): func() print('这是第二个函数')
func_two(func)
|
函数作为另一个函数的返回值
1 2 3 4 5 6 7 8 9 10
| def func(): print('这是第一个函数') def func_two(func): print('这是第二个函数') return func f = func_two(func) f()
|
lambda表达式,匿名函数
lambda是一个表达式,他的整体架构比def函数简单得多。所以lambda只能封装有限的逻辑。
lambda表达式的作用
lambda函数起到了函数速写的作用。
lambda表达式的格式语法
由于lambda表达式返回的是函数对象(这里构建的是一个函数对象),所以我们需要使用一个变量去接受它。
格式:lambda的一般形式是关键字lambda后面跟一个或多个参数,紧跟一个冒号,之后是一个表达式。
一个参数1 2 3
| res = lambda args : args + 1 print(res(1))
|
多个参数1 2 3
| res = lambda args1,args2 : args1 * args2 print(res(6,6))
|
Map函数
map函数接收的是两个参数,一个函数,一个序列,其功能是将序列中的值处理再依次返回至列表内。其返回值为一个迭代器对象。
匿名函数方式1 2
| alist = [1,2,3,4,5] ret = map(lambda x:x ** 2,alist)
|
def函数方式1 2 3 4 5
| alist = [1,2,3,4,5] def func(n): return n**2
ret = map(func,alist)
|
这里的返回值是一个迭代器对象,所以我们需要查看迭代器对象的三种方法
第一种1 2 3
| print(list(ret)) print(tuple(ret)) print(set(ret))
|
第二种1 2 3
| for i in ret: print(i,end=" ")
|
第三种1 2 3 4 5 6 7
| while True: try: print(next(ret),end=" ") except StopIteration as e: break
|
Sorted函数
sort 与 sorted 区别:
sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作,对原list无影响
1 2 3 4 5 6 7
| slist = [1,4,2,5,3] slist.sort() print(slist)
alist = [1,4,2,5,3] print(sorted(alist)) print(alist)
|
sorted接收三个参数(iterable,key,reverse)
其中reverse=False是降序(默认),reverse=True是升序
1 2 3
| alist = [1,5,-6,3,4] print(sorted(alist,key=abs,reverse=True))
|
Reduce函数
reduce计算过程:
先将第一个,第二个元素进行操作,然后把第一二个操作之后的结果和第三个元素进行操作,直到结束
lambda表达式1 2 3 4 5 6 7
| from functools import reduce
alist = [1,2,3,4,5] res = reduce(lambda x,y:x+y,alist) print(res)
|
def函数方式1 2 3 4 5
| def func(a,b): return a*b res = reduce(func,alist) print(res)
|
Filter函数
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
filter函数的返回值也是一个可迭代对象
def函数方式1 2 3 4 5
| def func(n): return n % 2 == 1 alist = filter(func, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) print(list(alist))
|
lambda表达式1 2 3
| res = filter(lambda a:a%2==1,[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) print(list(res))
|