自学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 对爬取到的秒杀商品信息进行排序