一、概念介绍

匿名函数:是指一类无需定义标识符(函数名)的函数或子程序

关键字lambda表示匿名函数,冒号前面的n表示函数参数,可以有多个参数。

匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。

用匿名函数有个好处,因为函数没有名字,不必担心函数名冲突。此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数:

有些函数在代码中只用一次,而且函数体比较简单,使用匿名函数可以减少代码量,看起来比较"优雅“

相比函数,lamba 表达式具有以下 2 个优势:

  • 对于单行函数,使用 lambda 表达式可以省去定义函数的过程,让代码更加简洁;
  • 对于不需要多次复用的函数,使用 lambda 表达式可以在用完之后立即释放,提高程序执行的性能。
def calc(x,y):return x**y#换成匿名函数
calc = lambda x,y:x**y
print(calc(2,5))def calc(x,y):if x > y:return x*yelse:return x / y#三元运算换成匿名函数
calc = lambda x,y:x * y if x > y else x / y
print(calc(2,5))

二、使用场景

2.1、和map函数一起使用

map()函数接收两个参数,一个是函数,一个是Iterablemap将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回

遍历序列,对序列中每个元素进行函数操作,最终获取新的序列。

## 求列表[1,2,3,4,5,6,7,8,9],返回一个n*n 的列表#一般解决方案
li = [1,2,3,4,5,6,7,8,9]
for ind,val in enumerate(li):li[ind] = val * val
print(li)
# [1, 4, 9, 16, 25, 36, 49, 64, 81]# 高级解决方案
li = [1,2,3,4,5,6,7,8,9]
print(list(map(lambda x:x*x,li)))
# [1, 4, 9, 16, 25, 36, 49, 64, 81]

2.2、与reduce函数一起使用

reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数reduce把结果继续和序列的下一个元素做累积计算,其效果就是:

reduce(func,[1,2,3]) 等同于 func(func(1,2),3),返回值为单个值

对于序列内所有元素进行累计操作

#接受一个list并利用reduce()求积
from functools import reduce
li = [1,2,3,4,5,6,7,8,9]
print(reduce(lambda x,y:x * y,li))
# 结果=1*2*3*4*5*6*7*8*9 = 362880a = [12, 34, 56]print reduce(lambda x , y: x + y, a)  # 102print reduce(lambda x , y: x - y, a) # -78

2.3、和filter函数一起使用

filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

对于序列中的元素进行筛选,最终获取符合条件的序列

# 在一个list中,删掉偶数,只保留奇数
li = [1, 2, 4, 5, 6, 9, 10, 15]
print(list(filter(lambda x:x % 2==1,li)))  # [1, 5, 9, 15]# 回数是指从左向右读和从右向左读都是一样的数,例如12321,909。请利用filter()筛选出回数
li = list(range(1, 200))
print(list(filter(lambda x:int(str(x))==int(str(x)[::-1]),li)))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66, 77, 88, 99, 101, 111, 121, 131, 141, 151, 161, 171, 181, 191]

2.4、和sorted函数一起使用

sorted(iterable, /, *, key=None, reverse=False)

接收一个key函数来实现对可迭代对象进行自定义的排序

可迭代对象:主要与列表,字符串,元祖,集合和字典

key:接受一个函数,根据此函数返回的结果,进行排序

reverse:排序方向,默认为从小到大,reverse=True为逆向

# 对列表按照绝对值进行排序
li= [-21, -12, 5, 9, 36]
print(sorted(li, key = lambda x:abs(x)))
# [5, 9, -12, -21, 36]"""
sorted()函数按照keys进行排序,并按照对应关系返回list相应的元素:keys排序结果 => [5, 9,  12,  21, 36]|  |    |    |   |
最终结果     => [5, 9, -12, -21, 36]
"""# 把下面单词以首字母排序
li = ['bad', 'about', 'Zoo', 'Credit']
print(sorted(li, key = lambda x : x[0]))
# 输出['Credit', 'Zoo', 'about', 'bad']
"""
对字符串排序,是按照ASCII的大小比较的,由于'Z' < 'a',结果,大写字母Z会排在小写字母a的前面。
"""# 假设我们用一组tuple表示学生名字和成绩:L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
# 请用sorted()对上述列表分别按名字排序
print(sorted(L, key = lambda x : x[0]))
# 输出[('Adam', 92), ('Bart', 66), ('Bob', 75), ('Lisa', 88)]# 再按成绩从高到低排序
print(sorted(L, key = lambda x : x[1], reverse=True))
# 输出[('Adam', 92), ('Lisa', 88), ('Bob', 75), ('Bart', 66)]

2.5、与三元运算结合

如下:

#if 条件为真的时候返回if前面内容,否则返回0
exp1= lambda x:x+1 if  2==1 else 0
print(exp1(2))
exp2 = lambda x:x+1 if  1==1 else 0
print(exp2(2))输出:
0
3#if not 为假返回if not前面内容,否则返回0
exp3 = lambda x:x+1 if not 2==1 else 0
print(exp3(2))  exp4 = lambda x:x+1 if not 1==1 else 0
print(exp4(2))输出:
3
0

三、参考文档

1、https://www.cnblogs.com/xiao-apple36/p/8577727.html

2、http://c.biancheng.net/view/2262.html

3、https://www.cnblogs.com/111testing/p/11914818.html

python匿名函数--lambda函数相关推荐

  1. python中的lambda函数用法--无需定义函数名的函数或子程序,避免代码充斥着大量单行函数

    匿名函数lambda:是指一类无需定义标识符(函数名)的函数或子程序. lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值. 要点: lambda 函数不能包含命令 包含 ...

  2. 一文让你彻底掌握【Python中的lambda函数】

    你应该听说过,应用Python,可以让你处理一天的重复工作量,缩短到几分钟甚至更短.从此解放上班时间,研究更多更有效率的工作方法.进一步提升工作效率,让工作更出彩.这不是广告,这是实锤图片. 本文和你 ...

  3. Python入门基础-四、案例1 汇率兑换 #分支语句if else# 循环语句while#函数#lambda函数

    (课程相关的所有资料代码,已上传至CSDN,请自行下载 https://download.csdn.net/download/qq_34243930/10764180 ) 汇率兑换 1.0(只考虑一种 ...

  4. Java箭头函数,lambda函数

    Java箭头函数,lambda函数 lambda表达式实质就是一种语法糖,(建议尽量不要使用lambda表达式,代码太简洁,难懂,难以调试) lambda表达式的简单例子: 不需要参数,返回5 ()- ...

  5. [转载] python匿名(lambda)函数

    参考链接: Python匿名/ Lambda函数 <利用python进行数据分析>chapter3 Python支持一种被称为匿名的.或lambda函数.它仅由单条语句组成,该语句的结果就 ...

  6. 【Python】高级函数lambda函数

    来说说python的lambda函数吧 lambda是python中用来构建匿名函数的关键字,啥叫匿名函数捏,所谓匿名函数就是当你需要使用一个函数完成操作,但懒得给这个函数起名字,恰巧这个函数也不是那 ...

  7. 关于python中lambda函数的描述_关于Python中的lambda函数

    lambda是Python编程语言中使用频率较高的一个关键字.那么,什么是lambda?它有哪些用法?网上的文章汗牛充栋,可是把这个讲透的文章却不多.这里,我们通过阅读各方资料,总结了关于Python ...

  8. array python lambda_Python 06 lambda函数

    lambda函数也叫匿名函数,即,函数没有具体的名称.先来看一个最简单例子: def f(x): return x**2 print f(4) Python中使用lambda的话,写成这样 g = l ...

  9. 详解python中的lambda函数

    什么是lambda? lambda是Python中预留的一个关键词,当我们需要一个函数,而又不想重新去为函数命名时,我们就可以使用lambda关键词来简单的去定义一个函数,也就是所谓的匿名函数,它在我 ...

  10. Python中的lambda函数用法

    匿名函数lambda:是指一类无需定义标识符(函数名)的函数或子程序.所谓匿名函数,通俗地说就是没有名字的函数,lambda函数没有名字,是一种简单的.在同一行中定义函数的方法. lambda函数一般 ...

最新文章

  1. shell case
  2. 独家 | 融资2.1亿商汤领投,他要用VR+AR解决无人驾驶的路测难题
  3. 软件工程个人作业(2)
  4. OSGi介绍及OSGi的Bundle应用
  5. 纯CSS无hacks的跨游览器多列布局(转)
  6. php课程 6-20 字符串基础和去除空格和字符串填补函数
  7. solidworks的小金球插件_SOLIDWORKS旋转流体仿真
  8. CF989E A Trance of Nightfall(概率+矩阵快速幂优化+倍增)
  9. mysql+inser+select_解析MySQL中INSERT INTO SELECT的使用
  10. 《大数据》再获新荣誉——“综合性人文社会科学”学科最受欢迎期刊
  11. (24)System Verilog多个线程间通信(信箱)
  12. python iterableiterator
  13. Today's Progress
  14. TCP/IP 网络协议
  15. java中 CopyOnWriteArrayList 的使用
  16. java进阶案例下载_登录案例java实现 ---- Java进阶篇
  17. JavaWeb在线聊天系统开发
  18. JavaEE初阶-计算机是如何工作的
  19. 仓储物流机器人:快仓、海柔创新“极速前进”
  20. ubuntu16.04使用umake安装pycharm-professional

热门文章

  1. 微信编辑器如何识别错别字
  2. 从流程驱动到数据驱动 银行业数据平台架构的演进
  3. 百分点大数据技术团队:基于HugeGraph的知识图谱技术在白酒行业的落地实践
  4. 扫地机器人评测 毛发_iRobot Roomba i7+扫地机器人评测:宠物毛发克星
  5. 九秒社团创始人李明:移动互联网时代开源社区发展之道
  6. js中判断文本框是否为空的两种方法
  7. 好玩的网站 可以实时看到任意航班的实时情况 位置 高度
  8. 机器学习、数据挖掘、深度学习的几个宝藏公众号
  9. response跳转html页面,JSP response页面跳转总结
  10. Ubuntu上面搭建Java开发环境