匿名函数(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:(x[1],x[1]/x[2])) # 按指定规则进行排序

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

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

运行结果如图16所示。

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

相关推荐
钮钴禄·爱因斯晨8 分钟前
C语言 | 函数核心机制深度解构:从底层架构到工程化实践
c语言·开发语言·数据结构
wkj00110 分钟前
php中array($this, ‘loadClass‘)表示啥意思?
android·开发语言·php
Stuomasi_xiaoxin11 分钟前
服务器重装后如何“复活”旧硬盘上的 Anaconda 环境?—— 一次完整的排错与恢复记录
开发语言·python·github
Z字小熊饼干爱吃保安11 分钟前
面试技术问题总结一
数据库·面试·职场和发展
程序员岳焱16 分钟前
Java 与 MySQL 性能优化:MySQL连接池参数优化与性能提升
后端·mysql·性能优化
这里有鱼汤16 分钟前
一招横盘突破选股法,赚钱不靠运气靠图形,靠概率!
后端·python
极限实验室26 分钟前
一键启动:使用 start-local 脚本轻松管理 INFINI Console 与 Easysearch 本地环境
数据库·docker
没有口袋啦30 分钟前
《数据库》第一次作业:MySQL数据库账户及授权
数据库·mysql
0wioiw036 分钟前
Ubuntu基础(Python虚拟环境和Vue)
linux·python·ubuntu
xiao5kou4chang6kai41 小时前
Python-GEE遥感云大数据分析与可视化(如何建立基于云计算的森林监测预警系统)
python·数据分析·云计算·森林监测·森林管理