Python高阶函数学习

简介: Python高阶函数学习

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

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

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

# 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

filter( 函数名, 可迭代对象 )    

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

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

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

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

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

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]

使用匿名函数

lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(list(filter(lambda x: x % 2 == 0, lst)))

map

map( 函数名,迭代对象 )

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

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

# 对可迭代对象进行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

reduce( 函数名(x,y) , 可迭代对象 )

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

reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

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

要想使用,必需导入functools模块。

# 求列表元素之和
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

使用匿名函数

import functools

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

sorted()

sorted(iterable,key,reverse)

其中,iterable是可迭代对象。

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

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

# 默认情况下,对字符串排序,是按照ASCII的大小比较的
lst = ['bb', 'aaaa', 'c', 'ddddddddd', 'fff']
print(sorted(lst))
输出:
['aaaa', 'bb', 'c', 'ddddddddd', 'fff']

#对列表按照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() 节省内存空间,提高效率。

目录
相关文章
|
1月前
|
PyTorch Linux 算法框架/工具
pytorch学习一:Anaconda下载、安装、配置环境变量。anaconda创建多版本python环境。安装 pytorch。
这篇文章是关于如何使用Anaconda进行Python环境管理,包括下载、安装、配置环境变量、创建多版本Python环境、安装PyTorch以及使用Jupyter Notebook的详细指南。
238 1
pytorch学习一:Anaconda下载、安装、配置环境变量。anaconda创建多版本python环境。安装 pytorch。
|
29天前
|
机器学习/深度学习 人工智能 架构师
Python学习圣经:从0到1,精通Python使用
尼恩架构团队的大模型《LLM大模型学习圣经》是一个系统化的学习系列,初步规划包括以下内容: 1. **《Python学习圣经:从0到1精通Python,打好AI基础》** 2. **《LLM大模型学习圣经:从0到1吃透Transformer技术底座》**
Python学习圣经:从0到1,精通Python使用
|
1月前
|
机器学习/深度学习 缓存 PyTorch
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
这篇文章是关于如何下载、安装和配置Miniconda,以及如何使用Miniconda创建和管理Python环境的详细指南。
339 0
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
|
1月前
|
开发者 Python
Python学习九:file操作
这篇文章是关于Python文件操作的详细教程,包括文件的打开、读写、关闭,以及文件备份脚本的编写和文件定位操作。
18 2
|
1月前
|
Java C# Python
Python学习七:面向对象编程(中)
这篇文章是关于Python面向对象编程的中级教程,涵盖了析构函数、对象的三大特征(封装、继承、多态)、类属性与实例属性、以及类方法与静态方法的对比。
22 2
|
1月前
|
设计模式 安全 JavaScript
Python学习八:面向对象编程(下):异常、私有等
这篇文章详细介绍了Python面向对象编程中的私有属性、私有方法、异常处理及动态添加属性和方法等关键概念。
20 1
|
1月前
|
Serverless Python
python高阶函数
【10月更文挑战第2天】
19 5
|
1月前
|
存储 Java 编译器
Python学习三:学习python的 变量命名规则,算数、比较、逻辑、赋值运算符,输入与输出。
这篇文章是关于Python编程语言中变量命名规则、基本数据类型、算数运算符、比较运算符、逻辑运算符、赋值运算符以及格式化输出与输入的详细教程。
18 0
Python学习三:学习python的 变量命名规则,算数、比较、逻辑、赋值运算符,输入与输出。
|
1月前
|
资源调度 前端开发 JavaScript
Python学习二:Python包管理器pip
这篇文章介绍了Python包管理器pip的基本概念、基本操作、如何更改下载源为国内镜像以加速下载,以及如何指定安装包的位置。
32 0
Python学习二:Python包管理器pip
|
1月前
|
缓存 并行计算 算法
如何提高 Python 高阶函数的性能?
【10月更文挑战第2天】
14 3