Python常用高阶函数(文末粉丝红包)

2020-11-04 15:36:38 浏览数 (1)

高阶函数的定义:接收函数作为参数,或者将函数作为返回值的函数。函数式编程就是指这种高度抽象的编程范式。

高阶函数的抽象能力是非常强大的,合理的使用高阶函数,可以简化代码,提升可读性。

例如使用高阶函数求两个数的绝对值之和:

代码语言:javascript复制
# f是第三个参数,用来接收将来传入的函数
def sum_num(a, b, f):
    return f(a)   f(b)
    
result1 = sum_num(-5, 1, abs)
print(result1)
# 输出:6

常见的高阶函数有:filter()、map()、reduce()、sorted(),下面看一下它们的基本用法吧。

filter

代码语言:javascript复制
filter( 函数名, 可迭代对象 )    

作用:过滤序列中不符合条件的元素。

filter有两个参数,第1参数可以是函数,也可以是None.

当第1个参数是函数的时候,将第2个参数中每个元素进行计算。

当第1个参数是None时,直接将第二个参数中为True的值筛选出来。

返回的是内存地址,需要用list()转换。

代码语言:javascript复制
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 得到列表中的偶数
def func(x):
    return x % 2 == 0


result = filter(func, lst)
print(list(result))

# 输出:
[2, 4, 6, 8, 10]

使用匿名函数

代码语言:javascript复制
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(list(filter(lambda x: x % 2 == 0, lst)))

map

代码语言:javascript复制
map( 函数名,迭代对象 )

作用:对可迭代对象的每一个元素作为函数的参数进行运算,然后将其添加到一个新的对象中返回。

返回的是内存地址,需要用list()转换。

代码语言:javascript复制
# 对可迭代对象进行2次方运算
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

result = map(lambda i: i ** 2, lst)
print(list(result))
#输出
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

reduce

代码语言:javascript复制
reduce( 函数名(x,y) , 可迭代对象 )

作用:reduce把一个函数作用在一个序列[x1, x2, x3…]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:

代码语言:javascript复制
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

每次函数计算的结果继续和序列的下一个元素做累积计算。

使用前,必需导入functools模块。

代码语言:javascript复制
# 求列表元素之和
import functools

lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


def func(a, b):
    return a   b


result = functools.reduce(func, lst)
print(result)
输出:
55

使用匿名函数

代码语言:javascript复制
import functools

lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(functools.reduce(lambda x, y: x   y, lst))

sorted()

代码语言:javascript复制
sorted(iterable,key,reverse)

其中,iterable是可迭代对象。

key可选参数,可以接收函数来实现自定义的排序,默认为None(直接比较)。

reverse:排序规则,为一个布尔值,reverse = True 降序 , reverse = False 升序(默认)。

代码语言:javascript复制
# 默认情况下,对字符串排序,是按照ASCII的大小比较的
lst = ['bb', 'aaaa', 'c', 'ddddddddd', 'fff']
print(sorted(lst))
输出:
['aaaa', 'bb', 'c', 'ddddddddd', 'fff']
代码语言:javascript复制
#对列表按照int值排序
lst = [2, 5, '1', 3, '6', '4']
print(sorted(lst, key=int))
输出:
['1', 2, 3, '4', 5, '6']

“还记得sort()与sorted的区别吗

  • sort() 函数只适用于列表排序,而sorted()函数适用于任意可以迭代的对象排序。
  • sort() 函数排序会改变原有的待排序列表,而sorted()函数则不会改变。所以在使用列表进行排序时,需要考虑是否需要保存原列表,如果无需保存原列表,则优先使用sort() 节省内存空间,提高效率。

0 人点赞