python高阶函数

x33g5p2x  于2021-08-23 转载在 Java  
字(1.4k)|赞(0)|评价(0)|浏览(217)

一 前言

本篇内容是关于一些高阶函数基本使用的知识,其目的主要是简化代码,更加精炼;

二 高阶函数

2.1 高阶函数概念

函数式编程为高阶函数(Higher-order function);函数式编程是指将一个函数作为另一个函数参数的编程方式;一般情况下使用函数式编程通常都会使用到匿名函数简化代码;

2.2 高阶函数示例

如下所示,定义过滤函数filter,如果函数值大于5就返回入参,否则返回None;

将 filter 函数 作为 getNumber 函数的第一个入参,在函数体调用filter函数对第二个入参arrs进行值的过滤操作;

最后对filter(num)进行判定,如果是None不入新的列表,否则加入列表;

# -*- coding: utf-8 -*-

# 对数组 arr 进行过滤
def getNumber(filter,arrs):
    return [ filter(num) for num in arrs if filter(num) is not None]

# 定义过滤函数
def filter(num):
    if num > 5:
        return num
    else:
        pass

result = getNumber(filter,list(range(0,10,2)))
print(result)

输出

[6, 8]

三 内置函数

常用的内置高阶函数如下;

3.1 map()

map函数接受两个参数,一个是函数,一个是序列;map将传入的函数依次作用于序列中的每个元素,将结果作为新的列表返回;

如下示例,传入匿名函数,其作用是对列表list中的每个值进行乘2,对新的值组成列表并返回;

anno_map = map(lambda x: x * 2, list(range(0,10,2)))
print(list(anno_map))

输出

[0, 4, 8, 12, 16]

3.2 reduce()

reduce():函数接收两个参数,一个是函数,另一个是序列;函数必须接收两个参数,reduce将序列的前一个参数和后一个参数进行累计计算的结果返回;

如下示例 将 0,2,4,6,8 进行累加的结果进行返回;

from functools import reduce

anno_reduce = reduce(lambda x, y: x + y, range(0,10,2))
# 20
print(anno_reduce)

3.3 filter()

filter():筛选过滤函数;将传入的函数,依次作用于每个元素,如果函数返回值是True就保留否则丢弃;

如下所示,对[0,10)的数字进行判定,如果能被2整除就保留,否则丢弃;

anno_filter = filter(lambda x: x % 2 == 0,list(range(10)) )
print(list(anno_filter))

输出

[0, 2, 4, 6, 8]

3.4 sorted()

sorted() 是排序函数 , 其参数如下

  • iterable 是一个序列
  • key 可计算的排序函数,用于自定义排序;
  • reverse 排序规则,reverse = False 升序(默认),reverse = True降序;

如下示例,key的函数进对列表中的每个元素进行作用,对运算后的结果进行大小比较,默认是升序;

anno_sorted = sorted([2,1,5,3,7], key=lambda x: x * x)
print(anno_sorted)

输出

[1, 2, 3, 5, 7]

相关文章