什么是高阶函数?

高阶函数:一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归),满足其一则为高阶函数。

函数作为参数
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))
# 2
多个参数
1
2
3
res = lambda args1,args2 : args1 * args2
print(res(6,6))
# 36

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)) #[1, 4, 9, 16, 25]
print(tuple(ret)) #(1, 4, 9, 16, 25)
print(set(ret)) #{1, 4, 9, 16, 25}
第二种
1
2
3
for i in ret:
print(i,end=" ")
# 1 4 9 16 25
第三种
1
2
3
4
5
6
7
#使用循环来获取,但是一直next获取,当获取不到会报无法停止的错误,所以使用try来处理。
while True:
try:
print(next(ret),end=" ")
except StopIteration as e:
break
# 1 4 9 16 25

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) # [1,2,3,4,5]

alist = [1,4,2,5,3]
print(sorted(alist)) # [1,2,3,4,5]
print(alist) # [1,4,2,5,3]

sorted接收三个参数(iterable,key,reverse)
其中reverse=False是降序(默认),reverse=True是升序

1
2
3
alist = [1,5,-6,3,4]
print(sorted(alist,key=abs,reverse=True))#这里我用了abs绝对值函数
#[-6, 5, 4, 3, 1]-6的绝对值是6,所以在第一位

Reduce函数

reduce计算过程:
先将第一个,第二个元素进行操作,然后把第一二个操作之后的结果和第三个元素进行操作,直到结束

lambda表达式
1
2
3
4
5
6
7
#reduce函数不是内置函数,而是在模块functools中的函数,故需要导包
from functools import reduce

alist = [1,2,3,4,5]
res = reduce(lambda x,y:x+y,alist)
print(res)
# 15
def函数方式
1
2
3
4
5
def func(a,b):
return a*b
res = reduce(func,alist)
print(res)
# 120

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))
# [1,3,5,7,9]
lambda表达式
1
2
3
res = filter(lambda a:a%2==1,[1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(list(res))
# [1,3,5,7,9]

评论





载入天数...载入时分秒...

Blog content follows the Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) License

Use WZH as theme, total visits times