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…...
零基础在实践中学习网络安全-皮卡丘靶场(第十四期-XXE模块)
本期内容涉及到很多前面的内容,因此复习后可以更好的了解本期内容 介绍 XXE -"xml external entity injection"即"xml外部实体注入漏洞"。 概括一下就是"攻击者通过向服务器注入指定的xml实体内容,从而让服务器按照指定的配置进行执行,导…...

vue项目使用svg图标
下面是在 Vue 3 项目中完整引入和使用 vite-plugin-svg-icons 的步骤 1、安装插件 npm install vite-plugin-svg-icons -D # 或 yarn add vite-plugin-svg-icons -D # 或 pnpm add vite-plugin-svg-icons -D 2、配置 Vite 在 vite.config.ts 或 vite.config.js 中配置&…...
Vue前端篇——Vue 3的watch深度解析
📌 前言 在 Vue.js 的世界中,“数据驱动”是其核心理念之一。而在这一理念下,watch 扮演着一个非常关键的角色。它允许我们监听响应式数据的变化,并在其发生变化时执行特定的业务逻辑。 本文将通过实际代码示例,深入…...

第六个微信小程序:教师工具集
源于工作需要,下面开始。 安装及使用 | Taro 文档 vscode 代码管理 git 辅助 开发技术如上: 1.开始创建模板 taro4.1.1 $ taro init teachers-tools 2.用vsocde开始吧。 选择 第二个文件夹找一。 (base) PS D:\react\teachers-tools> pnpm…...
随访系统安装的记录
安装PG17.5 安装https://www.cnblogs.com/nulixuexipython/p/18040243 1、遇到navicat链接不了PG https://blog.csdn.net/sarsscofy/article/details/84985933 2、查看有无安装mysqlhttps://blog.51cto.com/u_16175430/7261412 3、 方案一:oracle不开日志 data…...

嵌入式学习笔记 - freeRTOS xTaskResumeAll( )函数解析
第一部分 移除挂起等待列表中的任务 while( listLIST_IS_EMPTY( &xPendingReadyList ) pdFALSE )//循环寻找直到为空,把全部任务扫描一遍 { pxTCB ( TCB_t * ) listGET_OWNER_OF_HEAD_ENTRY( ( &xPendingR…...
【.net core】天地图坐标转换为高德地图坐标(WGS84 坐标转 GCJ02 坐标)
类文件 public static class WGS84ToGCJ02Helper {// 定义一些常量private const double PI 3.14159265358979324;private const double A 6378245.0;private const double EE 0.00669342162296594323;// 判断坐标是否在中国范围内(不在国内则不进行转换&#x…...

CentOS 7如何编译安装升级gcc至7.5版本?
CentOS 7如何编译安装升级gcc版本? 由于配置CentOS-SCLo-scl.repo与CentOS-SCLo-scl-rh.repo后执行yum install -y devtoolset-7安装总是异常,遂决定编译安装gcc7.5 # 备份之前的yum .repo文件至 /tmp/repo_bak 目录 mkdir -p /tmp/repo_bak && cd /etc…...

飞牛云一键设置动态域名+ipv6内网直通访问内网的ssh服务-家庭云计算专家
IPv6访问SSH的难点与优势并存。难点主要体现在网络环境支持不足:部分ISP未完全适配IPv6协议,导致客户端无法直接连通;老旧设备或工具(如Docker、GitHub)需额外配置才能兼容IPv6,技术门槛较高;若…...
虚实共生时代的情感重构:AI 恋爱陪伴的崛起、困局与明日图景
一、虚拟恋人:从技术幻想到情感刚需的跨越 在 5G 网络编织的数字浪潮里,AI 驱动的虚拟恋人正打破次元界限。深度学习算法剖析 3000 万段真实对话语料库,搭配 VR 设备带来的多维度交互体验,如今的虚拟对象已能精准模拟瞳孔微表情&…...