Python 函数式编程

匿名函数

Python 允许用 lambda 关键字创造匿名函数。匿名顾名思义就是没有名字,即不需要以标准的方式来声明,比如说,使用 def 加函数名来声明。一个完整的 lambda “语句”代表了一个表达式,这个表达式的定义体必须和声明放在同一行。语法如下:

lambda [arg1[, arg2, ... argN]]: expression

参数是可选的,如果使用参数的话,参数通常也会出现在表达式中。

注意:lambda 表达式返回可调用的函数对象。其实 lambda 表达式本身就是一个函数,这个函数定义了输入(冒号左边)和输出(冒号右边),只不过这个函数没有名字,但是我们可以把它赋给一个变量。

比如简单的加法函数。一般我们是这么写的:

lambda 表达式这么写: 

 

我们可以把 lambda x, y : x + y 赋值给 f ,然后给 f 传参数: 

 

可以看到,f 确实是个函数,可以接收两个参数,并返回这两个参数的和,等价于上面的 add 函数。

高阶函数

高阶函数英文叫 Higher-order function 。一般函数的输入参数和返回值都只能是变量或常量,如果某个函数可以接收函数作为其输入参数,或者其返回值中包含函数,那么该函数就是高阶函数。

Python 中有三个内建的用来支持函数式编程的高阶函数,分别是 filter(),map() 和 reduce()。

filter()

filter(function, sequence) 返回一个 sequence (序列),返回的序列中包括了输入序列中所有调用 function(item) 后返回值为 true 的元素。

filter() 工作流程如下图:

 

因为 filter() 的输入参数中包含函数 f() ,所以 filter() 是高阶函数。上面的例子中返回 2~24 中能被 3 或 5 整除的数组成的列表。

当然,也可以使用匿名函数 lambda 表达式实现:

 或者使用列表生成式:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/614673.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CountDownLatch应用场景代码练习

目录 概念原理核心参数和方法两种应用场景实现代码应用一:让 主任务 等待 所有子任务执行完毕后,再继续执行执行结果应用二:让所有子任务同时执行,打印出发时间执行结果应用二(扩展):让所有子任…

[沫忘录]MySQL 锁

[沫忘录]MySQL 锁 锁能够协调多线程或多进程并发访问某资源产生的数据冲突与错乱。而在数据库中,锁也是协调数据库访问的有效工具。 全局锁 能够锁住当前服务器所有数据库及其表。后续所有事务都只能进行读操作,而不能进行写操作或表属性更改。 典型…

C++入门系列-析构函数

🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” 析构函数 概念 析构函数,与构造函数功能相反,析构函数不是完成对对象本身的销毁,局部对象销毁工作是由编译器完成的,而对象在销…

即插即用篇 | YOLOv8 引入 Strip Pooling | 重新思考场景解析的空间池化

本改进已集成到 YOLOv8-Magic 框架。 空间池化已被证明在捕获像素级预测任务的长距离上下文信息方面非常有效,如场景解析。在本文中,我们超越了通常具有N N规则形状的常规空间池化,重新思考空间池化的构成,引入了一种新的池化策略,称为条带池化,它考虑了一个长而窄的核,…

【Linux】从零开始认识动静态库 -动态库

送给大家一句话: 我不要你风生虎啸, 我愿你老来无事饱加餐。 – 梁实秋 《我把活着欢喜过了》 ଘ(੭ˊᵕˋ)੭* ੈ✩‧₊˚ଘ(੭ˊᵕˋ)੭* ੈ✩‧₊˚ଘ(੭ˊᵕˋ)੭* ੈ✩‧₊˚ ଘ(੭ˊᵕˋ)੭* ੈ✩‧₊˚ଘ(੭ˊᵕˋ)੭* ੈ✩‧₊˚ଘ(੭ˊᵕˋ)੭…

ES6-自学01

调用方法读取文件:如果失败就throw抛出err,成功则抛出data 2.使用promise封装,如果失败就改变状态为 reject(err) 如果成功就 resolve(返回成功的值) ,然后then,就可以获取返回的值,值toString()方法来把…

示例十一、声音传感器

通过以下几个示例来具体展开学习,了解声音传感器原理及特性,学习声音传感器的应用(干货版): 示例十一、声音传感器 ino文件源码: //Arduino C demo void setup() {Serial.begin(9600);pinMode(5, OUTPUT); }void loo…

解决wangEditor使用keep-alive缓存后,调用editor.cmd.do()失败

前提:wangeditor版本:4.7.11 vue版本:vue2 问题:在使用wangeditor富文本编辑器时,需求需要通过点击一个按钮,手动插入定义好的内容,所以使用了 editor.cmd.do(insertHTML, ....) 方法新增…

steam_api64.dll是什么东西?steam_api64.dll缺失的多个详细解决方法

在现代PC游戏领域,Steam无疑是最具影响力的游戏分发和社交平台之一。它不仅提供了一个庞大的游戏市场,还集成了好友系统、成就系统、云存储等多种功能,为数百万玩家提供了便捷的游戏体验。在这庞大的生态系统中,steam_api64.dll作…

快递物流查询:如何实现快递批量查询?这些技巧助你轻松应对

在日常生活和工作中,我们经常需要查询快递物流信息,尤其是当面对大量的快递包裹时,逐一查询无疑会耗费大量的时间和精力。这时,实现快递批量查询就显得尤为重要。本文将为你介绍办公提效工具一些实现快递批量查询的技巧&#xff0…

基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (一)

基于LlaMA 3 LangGraph 在windows本地部署大模型 (一) RAG 是未来人工智能应用的基石。大家并不是在寻求仅仅产生无意义反应的人工智能。而目标是人工智能能够从特定文档集中检索答案,理解查询的上下文,指导自己搜索其嵌入内容或…

嵌入式C语言高级教程:实现基于STM32的智能健康监测手环

智能健康监测手环能够实时监控用户的生理参数,如心率、体温和活动量,对于健康管理和疾病预防非常有帮助。本教程将指导您如何在STM32微控制器上实现一个基本的智能健康监测手环。 一、开发环境准备 硬件要求 微控制器:STM32L476RG&#xf…

软考常见排序

1.桶排序 将需要排序的数组内容全都取出来放在另一个有序的数组中,然后在依次放回(菜鸟网原图) 2.冒泡排序 数组最前面的元素与之后的每个元素依次比较,后面的元素比前面的元素大,就获取后面的元素然后继续与后面元素比较,直到所有元素都比较过一遍. 3.选择排序 从待排序的数据…

Java基础入门day48

day48 JDBC调用关系 tomcat 简介 tomcat是Apache下的一个核心项目,免费开源,支持servlet和jsp。 tomcat技术先进,性能稳定,目前比较流行的web应用服务器 安装 官网: Apache Tomcat - Welcome! 下载 tomcat8.5 解压&a…

JavaScript创建日期

创建日期 在JavaScript中创建日期有四种方法 ● 使用new Date() const now new Date(); console.log(now);● 直接输入月、日、年、时间 console.log(new Date(Aug 02 2024 18:05:41));● 也可以输入年月日 console.log(new Date(December 24, 2015));● 直接按照年、月、…

【人工智能】博弈搜索(极小极大值、α-β剪枝)

1. 极小极大值算法 人工智能中 “博弈” 通常专指博弈论专家们称为有完整信息的、确定性的、轮流行动的、两个游戏者的零和游戏(如国际象棋)。术语中,这是指在确定的、完全可观察的环境中两个 Agent必须轮流行动,在游戏结束时效用值总是相等并…

一、精准化测试介绍

精准化测试介绍 一、精准化测试是什么?二、什么是代码插桩?三、两种插桩方式Offine模式:On-the-fly插桩: 四、jacoco覆盖率报告展示五、增量代码覆盖率监控原理六、精准测试系统架构图七、全量与增量覆盖率报告包维度对比八、全量与增量覆盖率…

芯品荟 | 酒柜屏控案例分享

产品简介 温控酒柜是一种专门设计用于存储和保护酒类的电器,它能为不同类型酒品提供最适宜的保存条件,以维持或提升酒的品质与风味。这类酒柜的主要特点是具备精准的温度控制功能,确保内部温度稳定在一个理想的范围内,通常为葡萄…

【DRAM存储器三十】DDR4介绍-DDR4 SDRAM的主要技术特性之bank group,为什么要搞个group出来?

👉个人主页:highman110 👉作者简介:一名硬件工程师,持续学习,不断记录,保持思考,输出干货内容 参考资料:《镁光DDR4数据手册》 、《JESD79-4B》 DDR4新增了bank group,大家想一想,为什么要增加这么个设定?其目的是什么? 如上是网上看到的一张从SDR到…

14:HAL---CRC校验

103系列只有一个CRC 前言: CRC(Cyclic Redundancy Check),即循环冗余校验,是一种根据网络数据包或电脑文件等数据产生简短固定位数校核码的快速算法,主要用来检测或校核数据传输或者保存后可能出现的错误。…