查看原文
其他

匿名函数lambda到底怎么用?

爬虫俱乐部 Stata and Python数据分析 2023-02-21

本文作者:许林丽,中南财经政法大学统计与数学学院

本文编辑:郭培军

技术总编:孙一博

Stata&Python云端课程来啦!

      好消息好消息,爬虫俱乐部开辟小鹅通战场!!爬虫俱乐部隆重推出小鹅通网络课程,将Stata基础课程Stata进阶课程Python课程都上传至小鹅通平台,欢迎大家多多支持订阅!报名课程即可加入答疑群,对报名有任何疑问欢迎在公众号后台留言哦。如需了解详情,可以通过课程链接(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或课程二维码进行访问哦~


引言

大家好啊,今天和小编一起来学习Python中一种简单实用的函数——lambda函数。在Python中,除了一般使用def定义的函数外,还有一种使用lambda定义函数的方法,这种函数可以省去定义函数的过程,让代码更加精简,下面来看该函数的详细介绍吧!


一、lambda的介绍
一般情况下,如果我们需要在Python中定义一个简单的函数,大家都很容易想到使用def语句来定义函数,比如定义一个加法函数,程序如下:
def add1(a, b): return a + b

事实上,如果使用def语句来定义简单函数,这个过程有时过于繁琐的。特别是当需要定义多个简单函数时,我们不仅需要对函数命名还要用return来返回值,那有什么方法可以使得程序更加简洁优化呢?这个时候就要用到匿名函数啦!

所谓匿名函数就是没有名字的函数,Python中使用lambda关键字来创建匿名函数。与def不同,它返回了一个函数而不是将这个函数赋值给一个变量名。通常以一种行内进行函数定义的形式使用,或者用作推迟执行一些代码。比如,上面的例子用lambda函数创建,程序如下:

func_add = lambda a, b: a + b

二、lambda表达式和使用方法
匿名函数的一般形式是关键字lambda后面跟上一个或者多个参数,冒号之后跟一个表达式:
lambda argument1, argument2, ... argumentN: expression using argument

argument1,argument2,...argumentN:可选参数,用于指定要传递的参数列表,多个参数间使用逗号“,”分隔。

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

下面用几个示例来感受一下匿名函数的强大功能吧!

示例一程序如下:

f1=lambda x,y,z:x*y*z f1(9,99,999) #三数相乘

运行结果如下:

示例二程序如下:

f2=lambda x='Wel',y='co',z='me':x+y+zf2('You ','and ') #可以使用默认的参数,就像在def中设置默认参数一样

运行结果如下:

在一些场合中,比如列表,字典中嵌入函数,但def不会在这些列表或字典中执行,这时候就需要用到lambda函数。

示例三程序如下:

f3=[lambda x:x**2,lambda x:x**4,lambda x:x**6]for i in f3: print(i(3)) #打印3的二次方,四次方和六次方结果

运行结果如下:

而如果想用def语句实现该功能,就需要在列表外定义三个函数,这就会显得很繁琐。程序如下:

def T1(x):return x**2def T2(x):return x**4def T3(x):return x**6f4=[T1,T2,T3]for a in f4: print(a(3))

上述例子充分显示出了使用lambda函数的优点:使用更少的代码行,并且可以避免创建仅使用一次的命名函数。


三、lambda函数与内置函数结合应用
1. filter()函数

filter()函数是Python中常见的一个内置函数,用于过滤掉序列中不符合条件的元素,返回由符合条件的元素组成的新序列。具体形式:

filter(function or None, iterable)

其中,function是过滤函数,iterable为一个过滤序列或可迭代对象。filter()会将过滤函数依次作用于过滤序列的每一个元素,返回一个由符合过滤函数条件的元素所组成的可迭代对象,如果function传入None,则返回所有本身可以判断为True的元素。

如果我们想要过滤出列表里面所有大于10的数字,程序如下:

number_1=[12,6,9,10,47,3,81]num1= filter(lambda x : x>10,number_1) #定义一个判断数字>10的过滤函数print(list(num1))

运行结果如下:

2. map()函数

map()函数是会根据提供的函数对指定的序列做映射,它返回的是一个新的迭代器对象,不会改变原有对象。具体形式:

map(func, iterables)

如果我们想要将数据中字母的大小写进行修正,程序如下:

name_1=['emily','BOB','lisA']name_2=map(lambda name : name.capitalize(),name_1) #规范name_1中的名字大小写print(list(name_2))

运行结果如下:

3. sort()函数

sort()函数是Python中列表的方法,该方法没有返回值,但是会对列表的对象进行排序,具体形式:

list.sort(key=None, reverse=False)

其中,key主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序;reverse是排序规则,reverse = True 降序, reverse = False 升序(默认)。

如果我们想对一个字典,按照其排名进行排序,程序如下:

student_list = [ {'id': 1, 'name': '张三', 'rank': 4}, {'id': 5, 'name': '王五', 'rank': 1}, {'id': 3, 'name': '陈四', 'rank': 2}]student_list.sort(key=lambda x:x['rank'])print(student_list)

运行结果如下:

4.sorted()函数

sorted()函数是Python的内置函数,具体形式:

sorted(iterable, cmp=None, key=None, reverse=False)

其中,iterable是可迭代对象,包括列表、元组、字典、字符串;cmp代表比较函数;key代表迭代对象中的某个属性,如某个元素的下标;reverse代表升序或者降序。

假如我们现在有一个列表的嵌套,需要对其价格或者数量进行排序,程序如下:

goods=[ #商品名称 商品价格 商品的数量 ["手机", 3999, 5000], ["电脑", 5999, 300], ["电视", 4999, 600], ["空调", 2599, 50],]sort_goods=sorted(goods,key=lambda x:x[1],reverse=True)print("按照价格进行排序".center(76,'*'))print(sort_goods)

运行结果如下:


sort_count_goods = sorted(goods, key=lambda x:x[2])print("按照商品数量进行排序".center(76, '*'))print(sort_count_goods)

运行结果如下:

以上就是关于匿名函数的详细介绍,感兴趣的小伙伴快动手练一下吧!




(END)
重磅福利!为了更好地服务各位同学的研究,爬虫俱乐部将在小鹅通平台上持续提供金融研究所需要的各类指标,包括上市公司十大股东、股价崩盘、投资效率、融资约束、企业避税、分析师跟踪、净资产收益率、资产回报率、国际四大审计、托宾Q值、第一大股东持股比例、账面市值比、沪深A股上市公司研究常用控制变量等一系列深加工数据,基于各交易所信息披露的数据利用Stata在实现数据实时更新的同时还将不断上线更多的数据指标。我们以最前沿的数据处理技术、最好的服务质量、最大的诚意望能助力大家的研究工作!相关数据链接,请大家访问:(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或扫描二维码:


最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。



对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!



往期推文推荐

Stata绘图系列—NBER Working paper仿图

       Camelot:从PDF中提取表格数据      Stata之计算财务指标——融资约束

      列表生成式|让你的代码更简洁

Stata绘图系列——玩转绘图通用选项之坐标轴

       玩转地图的好帮手--pyecharts

       爬虫俱乐部又又又输送了一位研究助理!!!      【数据分析】一文教你玩转DataFrame

 震惊,爬虫俱乐部竟是这样运营答疑群的?!

【数据分析-入门】一看就会!Numpy的创建、索引、切片与更新

带你玩转Stata编码一言不合就teamviewer

【基础篇】循环语句的continue与break

        教你用Stata爬取全国疫情风险地区数据,原来这么简单!【数据结构】集合的使用方法      Stata爬取七普人口数据

       浅析Python的序列化与反序列化

     爬虫俱乐部的精彩答疑--爬虫为何失败?

       利用Stata批量制作学生证     【数据分析-入门】科学计算基本库—Numpy的简单使用

关于我们 


   微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

   武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。



此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。

投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里
为作者署名,并有赏金分成。

2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可

以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存