Python学习之-lambda表达式

前言:

Python 的 lambda 表达式是一种匿名函数的快捷方式,它允许你在代码中快速定义单行的小函数。lambda 表达式的语法非常简洁:它仅使用 lambda 关键字 followed by one or more arguments, a colon :, and the expression to evaluate and return. 这使得 lambda 表达式尤其适合于需要函数对象的地方,比如map()、filter()及排序操作等,而不必正式地定义一个函数。
匿名函数,顾名思义,是没有名字的函数。在 Python 中,匿名函数通过 lambda 表达式来创建。
匿名函数不像标准的函数那样用 def 关键字定义,它没有函数名,只有函数体。因此,匿名函数也被称作 lambda 函数。匿名函数通常用于一些只需要临时使用一次的小函数,特别是在需要将函数作为参数传递给高阶函数时。

1 lambda表达式的语法:

lambda arguments: expression

这里,arguments 是传递给 lambda 的参数,可以是多个参数,用逗号隔开;expression 是关于这些参数的表达式,表达式的计算结果会被 lambda 表达式返回。

1.1 例1: 将一个列表中的元素都加上10。

普通函数:

def add_ten(x):return x + 10print(add_ten(5))  # 15

lambda 表达式:

add_ten_lambda = lambda x: x + 10
print(add_ten_lambda(5))  # 15

1.2 例2: 使用filter()函数过滤出列表中的偶数。

普通函数:

def is_even(x):return x % 2 == 0filtered_even = filter(is_even, [1, 2, 3, 4, 5, 6])
print(list(filtered_even))  # [2, 4, 6]

lambda 表达式:

filtered_even_lambda = filter(lambda x: x % 2 == 0, [1, 2, 3, 4, 5, 6])
print(list(filtered_even_lambda))  # [2, 4, 6]

1.3 使用 map() 和 lambda 表达式来计算每个数字的平方

普通函数:

# 定义原始列表
numbers = [1, 2, 3, 4, 5]# 定义一个普通函数用于计算数字的平方
def square(x):return x ** 2# 使用 map() 和普通函数来计算每个数字的平方
squared_numbers = map(square, numbers)# 将 map 对象转换为列表并打印
print(list(squared_numbers))  # 输出: [1, 4, 9, 16, 25]

lambda实现:

# 定义原始列表
numbers = [1, 2, 3, 4, 5]# 使用 map() 和 lambda 表达式来计算每个数字的平方
squared_numbers = map(lambda x: x ** 2, numbers)# 将 map 对象转换为列表并打印
print(list(squared_numbers))  # 输出: [1, 4, 9, 16, 25]

1.4 多参数举例

比如说我们想要根据一个列表中元组的第二个元素进行排序,可以使用 lambda 表达式作为 sorted() 函数的 key 参数,这里的参数我们也可以传入一个list
普通函数:

# 假设我们有一个元组列表
pair_list = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]# 定义一个普通函数,该函数用于获取元组的第二个元素
def get_second_element(pair):return pair[1]# 使用普通函数作为排序的键
sorted_list = sorted(pair_list, key=get_second_element)print(sorted_list)  
# 输出:[(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]

lambda实现:

# 假设我们有一个元组列表
pair_list = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]# 使用 lambda 表达式作为排序的键(根据每个元组的第二个元素)。
sorted_list = sorted(pair_list, key=lambda pair: pair[1])print(sorted_list)  
# 输出:[(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]

在这个例子中,lambda pair: pair[1] 指示 sorted() 函数根据元组中索引为 1 的元素(即元组中的字符串)来进行排序。
通过这些例子,可以看到 lambda 表达式是非常灵活的,并能以简洁的方式处理多参数的情况。

1.5 lambda和与普通函数的区别

定义方式: lambda 表达式是匿名的,即没有具体的名称,而普通函数以def关键字定义,拥有函数名。
简洁性: lambda 表达式通常很简短,只能有一个表达式,不像普通函数那样可以包含多行代码。
使用场景: 由于它们的简洁性,lambda 表达式常用于需要简单函数作为参数的场景中,如map()、filter()函数等,而普通函数更适合复杂的逻辑。
返回值: lambda 自动返回其单个表达式的结果,普通函数则需要显式返回值,使用return语句。

1.6 匿名函数的优点:

简洁性: lambda 表达式通常只包含单个表达式,创建时不需要命名,这样可以编写更简洁的代码。
表达式本质: lambda 函数可以在需要函数的任何地方使用,经常用来编写跨越多行的表达式。
无需声明: 直接在需要的地方使用 lambda 表达式,可以避免在全局命名空间添加不必要的函数声明。
作为参数: 常用作其他函数的参数,尤其是在排序、过滤等操作中常作为key函数。
闭包: 它们可以捕获包含作用域的变量(形成闭包),所以它们能访问这些变量,即便离开了变量的作用域。

1.6 匿名函数的缺点:

功能限制: lambda 表达式被设计为直接计算一个表达式的值,不支持多条语句、分支和循环等构造。
可读性: 复杂的 lambda 表达式可读性差,可能会使代码难以理解,特别是对于不熟悉 lambda 的读者。
调试难度: lambda 表达式不容易调试,因为它缺少函数名,导致调试信息不够详细。
文档化: 匿名函数不能够像常规函数那样被单独文档化,因为它们没有名称。
性能: lambda 函数可以在运行时创建,这可能会略微影响性能,特别是在大量使用时。
在实践中,开发者通常在需要简单函数而不想或不需要声明一个完整函数时使用 lambda 表达式。如果一个函数是单次使用,特别是作为另一个函数的参数(比如 map()、filter()、sorted()),而且函数的逻辑足够简单,那么使用 lambda 表达式是很合适的。

然而,当函数的逻辑变得复杂时,或者当相同的函数在多个地方需要被使用时,定义一个具有明确名称和文档的常规函数通常更为合适,这有助于提高代码的可读性和可维护性。

总结:

总的来说,lambda 表达式提供了一种快速定义简单函数的方法,适合用于简单的操作,而普通函数则更适合处理更复杂的任务。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CC工具箱使用指南:【经度转3度带和6度带】

一、简介 在规划工作中,经常会遇到不清楚规划用地所在的3度带或6度带带号的情况。 其实只要知道所在地的经度即可计算出带号,具体计算方法百度可知: 三度带和六度带1.高斯投影6度带:自0子午线起每隔经差6自西向东分带&#xff…

神策数据参与制定首份 SDK 网络安全国家标准

国家市场监督管理总局、国家标准化管理委员会发布中华人民共和国国家标准公告(2023 年第 13 号),全国信息安全标准化技术委员会归口的 3 项国家标准正式发布。其中,首份 SDK 国家标准《信息安全技术 移动互联网应用程序&#xff0…

2014年认证杯SPSSPRO杯数学建模B题(第二阶段)位图的处理算法全过程文档及程序

2014年认证杯SPSSPRO杯数学建模 B题 位图的处理算法 原题再现: 图形(或图像)在计算机里主要有两种存储和表示方法。矢量图是使用点、直线或多边形等基于数学方程的几何对象来描述图形,位图则使用像素来描述图像。一般来说&#…

某某消消乐增加步数漏洞分析

一、漏洞简介 1) 漏洞所属游戏名及基本介绍:某某消消乐,三消游戏,类似爱消除。 2) 漏洞对应游戏版本及平台:某某消消乐Android 1.22.22。 3) 漏洞功能:增加游戏步数。 4&#xf…

【MATLAB源码-第22期】基于matlab的手动实现的(未调用内置函数)CRC循环码编码译码仿真。

操作环境: MATLAB 2022a 1、算法描述 循环码是线性分组码的一种,所以它具有线性分组码的一般特性,此外还具有循环性。循环码的编码和解码设备都不太复杂,且检(纠)错能力强。它不但可以检测随机的错误,还可以检错突发…

RPA使用Native Messaging协议实现浏览器自动化

RPA 即机器人流程自动化,是一种利用软件机器人或人工智能来自动化业务流程中规则性、重复性任务的技术。RPA 技术可以模拟和执行人类在计算机上的交互操作,从而实现自动化处理数据、处理交易、触发通知等任务。帮助企业或个人实现业务流程的自动化和优化…

【绝对有用】“利用ChatGPT赋能学术写作:技巧、方法与创新策略“

为了帮助读者利用ChatGPT进行学术写作,我以一种引人入胜的信息图表形式,概括了以下步骤和技巧: 使用英文提问:用英文提出问题,可以获得更准确的回答。生成大纲:通过创建文章大纲,为写作提供清晰…

leetcode热题100.柱状图中最大的矩形

Problem: 84. 柱状图中最大的矩形 文章目录 题目思路复杂度Code 题目 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 示例 1: 输入:hei…

按需自动加载 Element Plus 实测

按需加载是一种优化策略,可以提高前端应用程序的性能、用户体验和可维护性。在使用 Element UI 或其他大型 UI 组件库时,通过按需加载可以最大程度地发挥其优势,确保应用程序的性能和可扩展性得到有效的管理;其优势有:…

MySQL安装环境配置,工具(超详细讲解)

一、什么是MySQL MySQL与SQL server一样都是关系型数据库管理系统,起初它是由瑞典的MySQL AB公司开发的,该公司于2008年被Sun公司收购。之后,Sun公司在2009年被Oracle公司收购。现在MySQL是Oracle公司的重要产品之一。 1、MySQL版本 针对不…

python实战之基础篇(二)

一. 定义函数 二. 调用函数 1. 使用位置参数调用函数 2. 使用关键字参数调用函数 三. 参数的默认值 四. 可变参数 1. 基于元组的可变参数 2. 基于字典的可变参数 五. 函数中变量的作用域 global 可以将局部变量提升为全局变量 六. 过滤函数filter() 七. 映射函数map() 八. la…

Elasticsearch 和 Kibana 8.13:简化 kNN 和改进查询并行化

作者:Gilad Gal, Tyler Perkins, Srikanth Manvi, Aris Papadopoulos, Trevor Blackford 在 8.13 版本中,Elastic 引入了向量搜索的重大增强,并将 Cohere 嵌入集成到其统一 inference API 中。这些更新简化了将大型语言模型(LLM&a…

【阿里近100人+花27.1万造的】中文医学数据集 ChineseBLUE 分析

中文医学数据集 ChineseBLUE 分析 基本介绍数据集分类构造成本 论文:https://arxiv.org/pdf/2106.08087v5.pdf 链接:https://github.com/alibaba-research/ChineseBLUE 基本介绍 需要注意的是,中文生物医学文本在语言上与英文不同&#xf…

基于Echarts的超市销售可视化分析系统(数据+程序+论文)

本论文旨在研究Python技术和ECharts可视化技术在超市销售数据分析系统中的应用。本系统通过对超市销售数据进行分析和可视化展示,帮助决策层更好地了解销售情况和趋势,进而做出更有针对性的决策。本系统主要包括数据处理、数据可视化和系统测试三个模块。…

ES学习日记(一)-------单节点安装启动

基于ES7.4.1编写,其实一开始用的最新的8.1,但是问题太多了!!!!不稳定,降到7.4 下载好的安装包上传到服务器或虚拟机,创建ES目录,命令mkdir -p /路径xxxx 复制安装包到指定路径并解压: tar zxvf elasticsearch-8.1.0-linux-x86_64.tar.gz -C /usr/local/es/ 进入bin目录安装,命…

工业智能物联网关如何助力工业防震减灾

地震灾害难以预料,一旦发生往往就损失重大。对于工业领域而言,地震灾害的影响不仅仅是对人员安全的威胁,还包括对生产设施的破坏、生产进程的中断以及伴生的持续性经济损失。 随着5G、大数据、物联网技术的发展,面向工业领域构建一…

高效批量管理文件,轻松实现文件批量复制并覆盖相同文件名,轻松管理文件

亲爱的用户们,您是否在批量复制文件时常常被相同文件名困扰,手动一个个改名繁琐又费时?现在,我们为您推出一款智能的文件批量改名工具,帮助您轻松处理复制时的相同文件名,让文件管理更从容! 首…

洗车行业在线预约提前下单小程序源码系统 带完整的安装代码包以及搭建教程

随着人们生活水平的提高,汽车保有量不断增加,洗车服务市场需求也日益旺盛。然而,传统的洗车服务方式往往存在排队等待时间长、服务质量不稳定等问题,给消费者带来了不便。因此,开发一款在线预约提前下单小程序&#xf…

基于java+springboot+vue实现的宠物美容机构CRM系统(文末源码+Lw+ppt)23-364

摘要 随着网络科技的不断发展以及人们经济水平的逐步提高,网络技术如今已成为人们生活中不可缺少的一部分,而信息管理系统是通过计算机技术,针对用户需求开发与设计,该技术尤其在各行业领域发挥了巨大的作用,有效地促…

C语言--编译和链接

1.翻译环境 计算机能够执行二进制指令,我们的电脑不会直接执行C语言代码,编译器把代码转换成二进制的指令; 我们在VS上面写下printf("hello world");这行代码的时候,经过翻译环境,生成可执行的exe文件&…