Python 程序设计入门(014)—— Python 的 Lambda 函数(匿名函数)
Python 程序设计入门(014)—— Python 的 Lambda 函数(匿名函数)
目录
- Python 程序设计入门(014)—— Python 的 Lambda 函数(匿名函数)
- 一、匿名函数的定义
- 二、匿名函数的特征
- 三、匿名函数的常见用法
- 1、命名后调用
- 2、直接调用
- 3、将 Lambda 函数作为参数传递给其他函数(一般赋予 key 参数)
- (1)max() 函数
- (2)sorted() 函数
一、匿名函数的定义
Lambda 函数是函数式编程中的核心概念之一。Python 提供了一种简单的方法来定义 lambda 函数。匿名函数可以在不定义函数的情况下通过一行代码实现高效的函数功能。匿名函数可以在表达式中直接使用,非常方便。匿名函数的语法格式如下:
lambda [arguments] : expression
说明:
(1)arguments:形参列表,多个形参用逗号隔开,也可以不带参数。
形参列表的形式如下:
a, b
a=1, b=2
*args
**kwargs
a, b=1, *args
(2)expression:函数返回值的表达式,表达式只能有一个。
表达式的形式如下:
6
a + b
sum(b)
6 if a >10 else 7
(3)lambda 返回值是一个函数的地址,也就是函数对象。
例如:
fadd = lambda x,y:x+y
print(fadd)
print(fadd(3,2))运行结果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
<function <lambda> at 0x00000266BFC99EE0>
5
二、匿名函数的特征
(1)Lambda 函数是匿名的
所谓匿名函数,通俗地说就是没有名字的函数。
(2)Lambda 函数有输入和输出
输入是传入到参数列表 [arguments] 的值,输出是根据表达式 expression 计算得到的值。
(3)Lambda 函数拥有自己的命名空间
不能访问自己参数列表之外或全局命名空间里的参数,只能完成非常简单的功能。
常见的 Lambda函数示例:
lambda x, y: x+y # 函数的输入为x和y,输出是它们的和:x+y
lambda *args: sum(args) # 输入是任意个数参数,输出是它们的和
lambda **kwargs: 6 # 输入是任意键值对参数,输出是6
三、匿名函数的常见用法
1、命名后调用
如果我们只需要一个简单的函数,lambda 是一个很好的选择,可以被看作是定义函数的一种更简单的方法。我们可以给它一个名称,并像普通函数一样使用它。调用的形式如下:
fun_name = lambda arguments : expression
fun_name(arguments)
例如:
fun_perimeter = lambda r:3.14 * r * 2
fun_area = lambda r:3.14 * r ** 2
print("圆的周长:",fun_perimeter(5))
print("圆的面积:",fun_area(5))运行结果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
圆的周长: 31.400000000000002
圆的面积: 78.5
2、直接调用
直接调用 lambda 函数的语法格式如下:
(lambda arguments : expression)(arguments)
例如:
print("圆的周长:",(lambda r:3.14 * r * 2)(5))
print("圆的面积:",(lambda r:3.14 * r ** 2)(5))运行结果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
圆的周长: 31.400000000000002
圆的面积: 78.5
3、将 Lambda 函数作为参数传递给其他函数(一般赋予 key 参数)
(1)max() 函数
max() 函数返回给定参数的最大值,参数可以为序列。max() 函数的语法格式如下:
max( x, y, z, .... )说明:返回给定参数的最大值
例如:由 Lambda 函数决定是按元组的哪一个值排序。
num = [(100, 2.5), (150, 0.2), (80, 3.4), (120, 1.8)]
y = max(num, key=lambda x: x[0]) # 按元组的第1个值排序取最大值
print(y)
y = max(num, key=lambda x: x[1]) # 按元组的第2个值排序取最大值
print(y)运行结果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
(150, 0.2)
(80, 3.4)
(2)sorted() 函数
sorted() 函数对所有可迭代的对象进行排序操作。sorted() 函数的语法格式如下:
sorted(iterable, key=None, reverse=False)
参数说明:
(1)iterable:可迭代对象。
(2)key:指定用来进行比较的元素,指定可迭代对象中的一个元素进行排序。
(3)reverse:排序规则,reverse = True 降序, reverse = False 升序(默认)。
(4)返回值:返回重新排序的列表。
sort 与 sorted 区别:
(1)sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
(2)list 的 sort 方法是对已经存在的列表进行操作。而 sorted 函数返回的是一个新的 list,而不是在原来的基础上进行的操作。
例1:对列表的操作
num = [2,3,22,102,-87,11,-23]
print(sorted(num)) # 升序排列
print(sorted(num,key=lambda x :abs(x))) # 按绝对值升序排列,参数x接收的是列表的元素
stu = ["Jerry","Mark","tom","Black","zhangping","Liugang","WANGLIN"]
print(sorted(stu)) # 对名字排序(区分大小写)
print(sorted(stu,key=str.lower)) # 对名字排序(转换为小写后排序,即:不区分大小写)
print(sorted(stu,key=lambda x:x.lower())) # 作用同上
print(sorted(stu,key=lambda x:len(x))) # 按字符串的长度排序
# 参数x接收的是列表的元素,参数x接收的是列表的元素,参数x接收的是列表的元素
lang = [(11,"java"),(101,"go"),(201,"c"),(17,"vb"),(21,"c++")]
print(sorted(lang,key=lambda x:x[0])) # 按列表中的元组的第一列排序
print(sorted(lang,key=lambda x:x[1])) # 按列表中的元组的第二列排序运行结果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
[-87, -23, 2, 3, 11, 22, 102]
[2, 3, 11, 22, -23, -87, 102]
['Black', 'Jerry', 'Liugang', 'Mark', 'WANGLIN', 'tom', 'zhangping']
['Black', 'Jerry', 'Liugang', 'Mark', 'tom', 'WANGLIN', 'zhangping']
['Black', 'Jerry', 'Liugang', 'Mark', 'tom', 'WANGLIN', 'zhangping']
['tom', 'Mark', 'Jerry', 'Black', 'Liugang', 'WANGLIN', 'zhangping']
[(11, 'java'), (17, 'vb'), (21, 'c++'), (101, 'go'), (201, 'c')]
[(201, 'c'), (21, 'c++'), (101, 'go'), (11, 'java'), (17, 'vb')]
例2:对字典的操作
lang = {11:"java",101:"go",201:"c",17:"vb",21:"c++"}
print(lang)
print(sorted(lang.items(),key=lambda x:x[0])) # 按字典的 key 排序
print(sorted(lang.items(),key=lambda x:x[1])) # 按字典的 value 排序运行结果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
{11: 'java', 101: 'go', 201: 'c', 17: 'vb', 21: 'c++'}
[(11, 'java'), (17, 'vb'), (21, 'c++'), (101, 'go'), (201, 'c')]
[(201, 'c'), (21, 'c++'), (101, 'go'), (11, 'java'), (17, 'vb')]
相关文章:
Python 程序设计入门(014)—— Python 的 Lambda 函数(匿名函数)
Python 程序设计入门(014)—— Python 的 Lambda 函数(匿名函数) 目录 Python 程序设计入门(014)—— Python 的 Lambda 函数(匿名函数)一、匿名函数的定义二、匿名函数的特征三、匿…...

【MySQL系列】表约束的学习
「前言」文章内容大致是MySQL的表的约束。 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、MySQL表的约束1.1 空属性1.2 默认值(default)1.3 列描述(comment)1.4 zerofill1.5 主键(primary ke…...

低功耗LoRaWAN国产低功耗LoRa+RF射频前端芯片XD6500S
目录 典型应用XD6500S简介芯片特性 LoRa系列选型参考 LoRa是为低数据速率、远距离距离和超低功耗而优化的扩频协议,用于LPWAN应用程序的通信。 典型应用 一、智慧农业 智慧农业大田解决方案利用传感设备、自动化控制设备、气象站实时监测采集田间土壤墒情、气象…...

【基础IO】文件系统 {磁盘的物理结构,存储结构,逻辑结构;CHS 和 LBA 寻址方式;磁盘分区和块组;文件inode;软硬链接}
文件系统 文件分为: 内存文件:被进程打开的文件,文件被加载到内存中供进程快速读写。磁盘文件:没有被打开的文件,保存在磁盘上。磁盘文件被分门别类的存储和管理,用于支持更好的存取。 提示: …...
全角字符和半角字符
全角字符的由来 全角符号是双字节中文编码的历史遗留问题。当年在纯文本的界面中,为了让西文和中日韩的方块字对齐,就让西文字母、数字和标点也占用一个汉字的视觉空间,并使用 2 个字节存储。后来,其中的一些全角字符因为比较有用…...

【java】【经验】java: 错误: 不支持发行版本 6
前言:配置过maven之后,发现原来的一些项目运行提示java: 错误: 不支持发行版本 6或者java: 错误: 不支持发行版本 5,主要原因:是因为项目使用的Java版本和安装的Java版本不符合 目录 1 设置项目java版本 2 设置模块版本 3 set…...
Spring Boot3.0(四):Thymeleaf 使用详解
Thymeleaf 介绍 简单说,Thymeleaf 是一个跟 Velocity、FreeMarker 类似的模板引擎,它可以完全替代 JSP 。相较与其他的模板引擎,它有如下三个极吸引人的特点: 1.Thymeleaf 在有网络和无网络的环境下皆可运行,即它可以…...
杨辉三角【Java二维数组】
这个代码中,我们定义了一个二维数组nums来存储杨辉三角的每一个数字。在for循环中,我们初始化每一行的第一个和最后一个数字,并且根据上一行的数字来计算出中间的数字。 接着,我们使用两个嵌套的for循环来输出杨辉三角。第一个循…...
解决SpringBoot服务返回数据存在$ref $.data等相关问题
1、场景 在日常的开发中,我们数据接口返回数据使用了FastJson序列化数据,当返回一个数据list时候出现" r e f " " ref" " ref"".data" 等类似乱码一样的数据,当时我比较匪夷所思,我写…...

【iOS安全】开启任意app的WebView远程调试
参考:https://mp.weixin.qq.com/s/bNKxQaVrPaXsZ5BPbsXy7w (来自周智老师的公众号) 概述 Safari 有一个内置的前端调试器, 在iPhone通过局域网或者USB连接MacBook 并启用Safari 远程调试之后,前端调试器默认情况下对…...
windows下 java程序无窗口启动、无窗口启动java -jar
创建一个.bat文件,其他照抄,注意一下你自己的jar包路径和日志路径:例:java -jar C:\data\operation-1.0-SNAPSHOT.jar > C:\data\log.log 2>&1 & ------------文件内容 echo off %1 mshta vbscript:CreateObject(…...
锦程消费金融业务生变:App下架,部分自营信贷暂停
来源 | 镭射财经(leishecaijing) 被誉为消金房抵一哥的锦程消费金融,调整旗下自营信贷业务,展业回归房抵场景。 「镭射财经」独家获悉,锦程消费金融已暂停部分自营小额信贷业务,旗下锦囊贷App已经下架&am…...

Python爬虫在框架下的合规操作与风险控制
大家好!作为一名专业的爬虫代理供应商,我今天要和大家分享一些关于Python爬虫在法律框架下的合规操作与风险控制的知识。随着互联网的发展,数据爬取在商业和研究领域扮演着重要的角色,但我们也必须遵守相关法律和规定,…...
前端页面如何创建表格?table的结构、属性有哪些?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ HTML是什么?⭐ table标签的属性⭐ 注意事项⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏…...

神码ai伪原创工具【php源码】
大家好,小编为大家解答python炫酷烟花表白源代码的问题。很多人还不知道html代码烟花特效python,现在让我们一起来看看吧! 火车头采集ai伪原创插件截图: 目录 前言 环境准备 代码编写 效果展示 前言 Python实现浪漫的烟花特效 现在…...

Linux命令200例:mkdir用于创建目录(常用)
🏆作者简介,黑夜开发者,全栈领域新星创作者✌。CSDN专家博主,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 &…...

C语言内嵌汇编
反编译(二进制文件或者so库) objdump --help objdump -M intel -j .text -ld -C -S out > out.txt #显示源代码同时显示行号, 代码段反汇编-M intel 英特尔语法-M x86-64-C:将C符号名逆向解析-S 反汇编的同时,将反汇编代码和源代码交替显…...

《网络是怎样连接的》(三)
《网络是怎样连接的》(二.2)_qq_38480311的博客-CSDN博客 本文主要取材于 《网络是怎样连接的》 第三章。 简述:本文主要内容是解释 通过网线传输出去的包是如何经过集线器、交换机和路由器等网络设备,最终进入互联网的。 信号…...

SpringBoot 配置文件
一、配置文件作用 整个项目中所有重要的数据都是在配置文件中配置的,比如: 数据库的连接信息(包含用户名和密码的设置); 项目的启动端口; 第三方系统的调用秘钥等信息; 用于发现和定位问题的…...
【K8S】 deployment.yaml文件与Service yaml文件详解
目录 deployment.yaml文件详解Service yaml文件详解 deployment.yaml文件详解 apiVersion: extensions/v1beta1 #接口版本 kind: Deployment #接口类型 metadata:name: cango-demo #Deployment名称namespace: cango-prd #命名空间l…...

linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
嵌入式常见 CPU 架构
架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集,单周期执行;低功耗、CIP 独立外设;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel(原始…...
SQL Server 触发器调用存储过程实现发送 HTTP 请求
文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...

【UE5 C++】通过文件对话框获取选择文件的路径
目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 ,这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器,右键点击 .uproject 文件,选择 "Generate Visual Studio project files",重…...