匿名函数(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的首要用途是指定短小的回调函数。下面通过一个具体的实例进行演示。

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

实例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:(x1,x1/x2)) # 按指定规则进行排序

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

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

运行结果如图16所示。

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

相关推荐
普马萨特2 小时前
实体与位置关系的数据从哪里来:获取、治理与仍待解决的问题
网络·数据库
luj_17682 小时前
大律师考核应重能力与科技素养
c语言·开发语言·c++·经验分享·算法
醉颜凉2 小时前
KingbaseES日期格式化:MySQL date_format函数的迁移指南
mysql·date_format·kingbasees·数据库兼容·函数迁移
醉颜凉2 小时前
MySQL 8 忘记 root 密码?这两种方法帮你轻松解决
数据库·mysql·adb
刃神太酷啦2 小时前
Linux 系统 MySQL 完整安装配置教程:从卸载 MariaDB 到优化 my.cnf----《Hello MySQL!》(1)
android·linux·c语言·c++·mysql·leetcode·mariadb
威联通网络存储2 小时前
TS-h3087XU-RP 汽车零部件质检追溯部署
python·汽车
你驴我2 小时前
WhatsApp 多账号场景下的会话归档与历史消息检索优化实践
后端·python
RestCloud2 小时前
集成链路监控体系搭建:接口调用、数据流转与异常告警全覆盖
数据库·数据安全·ipaas·api管理·数据监控·集成平台·api 治理
IT毕设实战小研2 小时前
基于安卓的空气质量查询系统
android·大数据·vue.js·爬虫·python·django·课程设计
leonkay3 小时前
C# 特性(Attribute)——【1】基础讲解
开发语言·青少年编程·面试·c#·.net·个人开发