匿名函数(lambda)

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm=1001.2014.3001.5501

匿名函数是指没有名字的函数,应用在需要一个函数,但是又不想费神去命名这个函数的场合。通常情况下,这样的函数只使用一次。在Python中,使用lambda表达式创建匿名函数,其语法格式如下:

result = lambda [arg1 [,arg2,……,argn]]:expression

参数说明:

l  result:用于调用lambda表达式。

l  [arg1 [,arg2,……,argn]]:可选参数,用于指定要传递的参数列表,多个参数间使用逗号“,”分隔。

l  expression:必选参数,用于指定一个实现具体功能的表达式。如果有参数,那么在该表达式中将应用这些参数。

注意:使用lambda表达式时,参数可以有多个,用逗号“,”分隔,但是表达式只能有一个,即只能返回一个值。而且也不能出现其他非表达式语句(如for或while)。

例如,要定义一个计算圆面积的函数,常规的代码如下:

import math                             # 导入math模块

def circlearea(r):                     # 计算圆面积的函数

    result = math.pi*r*r               # 计算圆面积

    return result                      # 返回圆的面积

r = 10                                  # 半径

print('半径为',r,'的圆面积为:',circlearea(r))

执行上面的代码后,将显示以下内容:

半径为 10 的圆面积为: 314.1592653589793

使用lambda表达式的代码如下:

import math                                 # 导入math模块

r = 10                                      # 半径

result = lambda r:math.pi*r*r               # 计算圆的面积的lambda表达式

print('半径为',r,'的圆面积为:',result(r))

执行上面的代码后,将显示以下内容:

半径为 10 的圆面积为: 314.1592653589793

从上面的示例中可以看出,虽然使用lambda表达式比使用自定义函数的代码减少了一些,但是在使用lambda表达式时,需要定义一个变量,用于调用该lambda表达式,否则将输出类似的结果:

<function <lambda> at 0x0000000002FDD510>

这看似有点画蛇添足。那么lambda表达式具体应该怎么应用?实际上,lambda的首要用途是指定短小的回调函数。下面通过一个具体的实例进行演示。

场景模拟:假设采用爬虫技术获取某商城的秒杀商品信息,并保存在列表中,现需要对这些信息进行排序,排序规则是优先按秒杀金额升序排列,有重复的,再按折扣比例降序排列。

图标 (35)

  实例06  应用lambda实现对爬取到的秒杀商品信息进行排序

在IDLE中创建一个名称为seckillsort.py的文件,然后在该文件中定义一个保存商品信息的列表,并输出,接下来再使用列表对象的sort()方法对列表进行排序,并且在调用sort()方法时,通过lambda表达式指定排序规则,最后输出排序后的列表,代码如下:

bookinfo = [('不一样的卡梅拉(全套)',22.50,120),('零基础学Android',65.10,89.80),

        ('摆渡人',23.40,36.00),('福尔摩斯探案全集8册',22.50,128)]

print('爬取到的商品信息:\n',bookinfo,'\n')

bookinfo.sort(key=lambda x:(x[1],x[1]/x[2]))    # 按指定规则进行排序

print('排序后的商品信息:\n',bookinfo)

在上面的代码中,元组的第一个元素代表商品名称,第二个元素代表秒杀价格,第三个元素代表原价。例如,“( '不一样的卡梅拉(全套) ',22.50,120)”表示商品名称为“不一样的卡梅拉(全套)”,秒杀价格为“22.50”元,原价为“120”元。

运行结果如图16所示。

图16  对爬取到的秒杀商品信息进行排序

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

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

相关文章

【Qt】Qt界面美化指南:深入理解QSS样式表的应用与实践

文章目录 前言&#xff1a;1. 背景介绍2. 基本语法3. QSS 设置方式3.1. 设置全局样式3.2. 从文件加载样式表3.3. 使用 Qt Designer 编辑样式 总结&#xff1a; 前言&#xff1a; 在当今这个视觉至上的时代&#xff0c;用户界面&#xff08;UI&#xff09;的设计对于任何软件产…

智能制造案例专题|与MongoDB一起解锁工业4.0转型与增长的无限潜力!

MongoDB 智能制造 数字化技术的洪流在各个产业链的主干和枝节涌现。在工业制造领域&#xff0c;能否通过数字化技术实现各生产要素、生产环节之间的紧密配合&#xff0c;高效规划、管理整个生产流程&#xff0c;是企业提升韧性、赢得竞争的关键。随着工业4.0的深入发展和智能…

高级Java开发者的自我修养:深入剖析JVM垃圾回收机制及面试要点

在探索Java虚拟机&#xff08;JVM&#xff09;的奥秘过程中&#xff0c;垃圾回收机制&#xff08;GC&#xff09;是一个不可或缺的话题&#xff0c;尤其在面对大型应用和系统优化时显得尤为重要。JVM的自动内存管理是Java编程语言中一项革命性的特性&#xff0c;它大大简化了程…

测试记录2:Ubuntu工程直接添加使用Eigen3源文件

直接将Eigen3源文件放入到工程目录下使用&#xff0c;免安装 1.新建空文件夹Test_eigen 2.创建将eigen下载的文件夹解压&#xff0c;重命名为eigen3放入到Test_eigen 3.进入Test_eigen&#xff0c;创建main.cpp #include <iostream> #include <Eigen/Eigen>int m…

AI盒子在智慧加油站的应用

方案背景 为规范加油站作业&#xff0c;保障人民生命财产安全&#xff0c;《加油站作业安全规范》&#xff08;AQ 3010-2007&#xff09;中第五条规定&#xff1a;卸油作业基本要求&#xff0c;明确防静电、防雷电、防火、人员值守、禁止其他车辆及非工作人员进入卸油区。 痛点…

数据结构基础篇(4)

十六.循环链表 概念 循环链表是一种头尾相接的链表&#xff08;最后一个结点的指针域指向头结点&#xff0c;整个链表形成一个环&#xff09;优点 从表任一结点出发均可找到表中其他结点判断终止 由于循环链表中没有NULL指针&#xff0c;所以涉及遍历操作时&#xff0c;终止条…

RocketMQ学习(2) 深入学习

RokcetMQ的介绍和基础知识见这篇博客——RocketMQ学习(1) 快速入门 本篇为上一篇的深入学习&#xff0c;很多基础知识不再赘述。 目录 消息重复消费问题(去重;幂等)布隆过滤器 重试机制死信消息 SpringBoot集成RocketMQ集成SpringBoot发送不同消息模式(同步消息)异步消息单向消…

python下载指定URL的文件

import requests # 图片的URL地址 url https://book.pep.com.cn/1212001402143/files/mobile/1.jpg?240301113921 # 发送HTTP GET请求 response requests.get(url) # 检查请求是否成功 if response.status_code 200: # 打开一个文件用于写入 with open(download…

实习碰到的问题w1

1.vueelementUI在输入框中按回车键会刷新页面 当一个 form 元素中只有一个输入框时&#xff0c;在该输入框中按下回车应提交该表单。如果希望阻止这一默认 行为&#xff0c;可以在 <el-form> 标签上添加 submit.native.prevent 。 参考&#xff1a;element-ui 表单 form …

使用el-tab,el-tab-pane循环使用循环后不显示下划线问题

在vue项目中使用element-UI el-tab里的el-tab-pane是循环出来的&#xff0c;但是循环出来后选中tab不显示下划线了 文章目录 问题问题展示效果问题代码问题原因 解决方案解决后效果解决方案1代码 解决方案2代码 问题 问题展示效果 问题代码 <el-tabs v-model"activeNa…

音量的对数表示与浮点数表示

音量用浮点数&#xff08;float&#xff09;和对数&#xff08;logarithmic scale&#xff09;表示各有特点和应用场景 浮点数&#xff1a;直接使用线性刻度表示音量&#xff0c;例如在0.0&#xff08;最小音量&#xff09;到1.0&#xff08;最大音量&#xff09;的范围内。对…

『 Linux 』缓冲区(万字)

文章目录 &#x1f9a6; 什么是缓冲区&#x1f9a6; 格式化输入/输出&#x1f9a6; 刷新策略&#x1fab6; 块缓冲(fully buffered)&#x1fab6; 无缓冲(unbuffered)&#x1fab6; 行缓冲(line buffered) &#x1f9a6; 现象解释&#x1f9a6; exit()与_exit()&#x1f9a6; 进…

list 的实现

目录 list 结点类 结点类的构造函数 list的尾插尾删 list的头插头删 迭代器 运算符重载 --运算符重载 和! 运算符重载 * 和 -> 运算符重载 list 的insert list的erase list list实际上是一个带头双向循环链表,要实现list,则首先需要实现一个结点类,而一个结点需要…

【代码随想录——回溯算法——四周目】

1.重新安排行程 1.1 我的代码&#xff0c;超时通不过 var (used []boolpath []stringres []stringisFind bool )func findItinerary(tickets [][]string) []string {sortTickets(tickets)res make([]string, len(tickets)1)path make([]string, 0)used make([]bool,…

JSON Web Token

JWT 什么是JWT JWT&#xff08;JSON Web Token&#xff09;是一种用于在各方之间作为JSON对象安全地传输信息的开放标准&#xff08;RFC 7519&#xff09;。该信息经过数字签名&#xff0c;因此是可验证和可信的。JWT 可以使用HMAC算法或使用RSA的公钥/私钥对进行签名 JWT的…

微信小程序 vant Picker组件default-index不生效的解决办法

1、原始的写法以及问题 <van-popup show"{{ showPopup && cellClick Freq }}" position"bottom" bind:close"onPopupClose"><van-picker value-key"Spec" show-toolbar title"{{cellClick Freq ? showPcCha…

win10键盘按乱了,如何恢复?

今天键盘被宝宝给按乱了&#xff0c;好不容易给重新调整回来&#xff0c;记录备忘&#xff1a; 1、win10的asdf和方向键互换了&#xff1a; 使用Fnw键来回切换&#xff0c;OK&#xff01; 2、键盘的win键失效&#xff0c;例如&#xff1a;按winD无法显示桌面。此时&#xf…

Day30

Day30 CSS CSS常用样式 font-family:“微软雅黑” -设置字体 font-size: 50px -设置字体大小 font-style : italic-设置字体风格 font-weight:bolder -设置字体粗细 color: white-设置字体颜色 letter-spacing: 20px-设置文本内容的间隔 text-decoration :underline - 设置划…

电动汽车电子系统架构

电动汽车的普及正在稳步发展&#xff0c;供应链的各个环节也在发生变化。它涵盖了制造电动汽车零件的原材料、化学品、电池和各种组件。与此同时&#xff0c;汽车充电基础设施也参与其中&#xff0c;它们正经历一个历史性的阶段&#xff0c;经过彻底的重新设计。它们的电气化以…

Wpf 使用 Prism 实战开发Day30

登录界面设计 一.准备登录界面图片素材&#xff08;透明背景图片&#xff09; 1.把准备好的图片放在Images 文件夹下面&#xff0c;格式分别是.png和.ico 2.选中 login.png图片鼠标右键&#xff0c;选择属性。生成的操作选择>资源 3.MyTodo 应用程序右键&#xff0c;属性&a…