在python开发中常规的函数在调用之前都需要先声明,而python还有一种匿名函数,有速写函数的功能并且匿名函数不需要声明也没有函数名字,完全不需要担心函数名冲突,具体的妙用还需要从实战练习中多多积累经验。
成都创新互联是一家以网站建设、网页设计、品牌设计、软件运维、成都网站营销、小程序App开发等移动开发为一体互联网公司。已累计为成都展览展示等众行业中小客户提供优质的互联网建站和软件开发服务。1 | lambdaa,b,c:expression |
匿名函数有以下几个特点:
1.匿名函数有关键字 lambda 修饰;
2.匿名函数冒号 : 之前的是函数的参数,匿名函数可以是无参匿名函数,也可以是带参匿名函数;
3.匿名函数冒号 : 之后是表达式,匿名函数不需要写 return,表达式的结果就是返回值;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | # !usr/bin/env python # -*- coding:utf-8 _*- """ @Author:何以解忧 @Blog(个人博客地址): shuopython.com @WeChat Official Account(微信公众号):猿说python @Github:www.github.com @File:python_lambda.py @Time:2019/10/5 17:48 @Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累! """ #不带参数的普通函数 defsing_dog(): returnTrue #不带参数的匿名函数 f0=lambda:True# 无参的匿名函数,在匿名函数的冒号前面无需写参数 print(sing_dog()) print(f0()) print("***"*20) #带参数的普通函数 defsub(a,b): returna-b defadd(a,b): returna+b #带参数的匿名函数 f1=lambdaa,b:a-b f2=lambdaa,b:a+b print(sub(4,2)) print(add(4,2)) print(f1(4,2)) print(f2(4,2)) |
输出结果:
1 2 3 4 5 6 7 | True True ************************************************************ 2 6 2 6 |
首先,匿名函数和普通函数对比之下,明显能感觉到匿名函数的使用能让代码更加简洁,当然匿名函数使用场景适用于比较简单的需求,对于复杂的计算,匿名函数是无法完成的;
其次,无参的匿名函数,在匿名函数的冒号前面无需写参数;
假如有这样一个需求:传入一个字符串,对字符串根据空格拆分,并以字符串的形式返回拆分后的结果,示例代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | str1="laowang is sing_dog " #普通函数 defget_str(str1): # 1.将字符串拆分为列表 list1=str1.split(" ") # 2.将列表转为字符串并返回字符串 return"".join(list1) # 将1/2两步合并为一步完成 # return "".join(str1.split(" ")) print("打印原始字符串:",str1) print("调用普通函数获取字符串拆分结果:",get_str(str1)) #匿名函数 f0=lambdaa:"".join(a.split(" ")) print("调用匿名函数获取字符串拆分结果:",f0(str1)) |
输出结果:
1 2 3 | 打印原始字符串:laowangissing_dog 调用普通函数获取字符串拆分结果:laowangissing_dog 调用匿名函数获取字符串拆分结果:laowangissing_dog |
如果对字符串转换不太熟悉的童鞋请参考:字符串/列表/元组/字典之间的相互转换
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # 匿名函数:通过条件表达式,返回大值 f0=lambdax,y:xifx>yelsey print(f0(5,10)) # 匿名函数:求三个参数的乘积 f1=lambdax,y,z:x*y*z print(f1(1,2,3)) # 缺省的匿名函数 f2=lambdax,y=2:x+y#使用了默认值 print(f2(10))#第二个参数为缺省参数,使用默认值2 # 不定长参数的匿名函数 f3=lambda*z:z#*z返回的是一个元祖 print(f3('hello',False)) # 不定长参数的匿名函数 f4=lambda**Arg:Arg#arg返回的是一个字典 print(f4(a=1,b=2,k="hello")) |
输出结果:
1 2 3 4 5 | 10 6 12 ('hello',False) {'a':1,'b':2,'k':'hello'} |
如果对python不定长参数*argc,**kargcs 不太熟悉的话,可以在看一遍这篇文章:python函数不定长参数 *argc,**kargcs
其实匿名函数作为函数参数传参和普通函数传参没什么区别,示例代码如下:
1 2 3 4 5 6 7 8 9 10 | deffunction1(a,b,): returnaifa>belseb#返回大值 # 1.定义匿名函数 f0=lambdab:b*10 # 2.匿名函数作为参数,调用普通函数 function1(100,f0(5)) # 上面两行代码合并为一行 function1(100,(lambdab:b*10)(5)) |
1.匿名函数可以是无参匿名函数也可以是有参匿名函数;
2.匿名函数不仅可以直接当作函数调用,还能直接作为函数中的参数直接使用;
1.python函数声明和调用
2.python字典推导式
3.python列表推导式
4.python函数不定长参数 *argc,**kargcs
转载请注明:猿说Python » python匿名函数
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。