python匿名函数--lambda函数
一、概念介绍
匿名函数:是指一类无需定义标识符(函数名)的函数或子程序
关键字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()
函数接收两个参数,一个是函数,一个是Iterable
,map
将传入的函数依次作用到序列的每个元素,并把结果作为新的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函数相关推荐
- python中的lambda函数用法--无需定义函数名的函数或子程序,避免代码充斥着大量单行函数
匿名函数lambda:是指一类无需定义标识符(函数名)的函数或子程序. lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值. 要点: lambda 函数不能包含命令 包含 ...
- 一文让你彻底掌握【Python中的lambda函数】
你应该听说过,应用Python,可以让你处理一天的重复工作量,缩短到几分钟甚至更短.从此解放上班时间,研究更多更有效率的工作方法.进一步提升工作效率,让工作更出彩.这不是广告,这是实锤图片. 本文和你 ...
- Python入门基础-四、案例1 汇率兑换 #分支语句if else# 循环语句while#函数#lambda函数
(课程相关的所有资料代码,已上传至CSDN,请自行下载 https://download.csdn.net/download/qq_34243930/10764180 ) 汇率兑换 1.0(只考虑一种 ...
- Java箭头函数,lambda函数
Java箭头函数,lambda函数 lambda表达式实质就是一种语法糖,(建议尽量不要使用lambda表达式,代码太简洁,难懂,难以调试) lambda表达式的简单例子: 不需要参数,返回5 ()- ...
- [转载] python匿名(lambda)函数
参考链接: Python匿名/ Lambda函数 <利用python进行数据分析>chapter3 Python支持一种被称为匿名的.或lambda函数.它仅由单条语句组成,该语句的结果就 ...
- 【Python】高级函数lambda函数
来说说python的lambda函数吧 lambda是python中用来构建匿名函数的关键字,啥叫匿名函数捏,所谓匿名函数就是当你需要使用一个函数完成操作,但懒得给这个函数起名字,恰巧这个函数也不是那 ...
- 关于python中lambda函数的描述_关于Python中的lambda函数
lambda是Python编程语言中使用频率较高的一个关键字.那么,什么是lambda?它有哪些用法?网上的文章汗牛充栋,可是把这个讲透的文章却不多.这里,我们通过阅读各方资料,总结了关于Python ...
- array python lambda_Python 06 lambda函数
lambda函数也叫匿名函数,即,函数没有具体的名称.先来看一个最简单例子: def f(x): return x**2 print f(4) Python中使用lambda的话,写成这样 g = l ...
- 详解python中的lambda函数
什么是lambda? lambda是Python中预留的一个关键词,当我们需要一个函数,而又不想重新去为函数命名时,我们就可以使用lambda关键词来简单的去定义一个函数,也就是所谓的匿名函数,它在我 ...
- Python中的lambda函数用法
匿名函数lambda:是指一类无需定义标识符(函数名)的函数或子程序.所谓匿名函数,通俗地说就是没有名字的函数,lambda函数没有名字,是一种简单的.在同一行中定义函数的方法. lambda函数一般 ...
最新文章
- shell case
- 独家 | 融资2.1亿商汤领投,他要用VR+AR解决无人驾驶的路测难题
- 软件工程个人作业(2)
- OSGi介绍及OSGi的Bundle应用
- 纯CSS无hacks的跨游览器多列布局(转)
- php课程 6-20 字符串基础和去除空格和字符串填补函数
- solidworks的小金球插件_SOLIDWORKS旋转流体仿真
- CF989E A Trance of Nightfall(概率+矩阵快速幂优化+倍增)
- mysql+inser+select_解析MySQL中INSERT INTO SELECT的使用
- 《大数据》再获新荣誉——“综合性人文社会科学”学科最受欢迎期刊
- (24)System Verilog多个线程间通信(信箱)
- python iterableiterator
- Today's Progress
- TCP/IP 网络协议
- java中 CopyOnWriteArrayList 的使用
- java进阶案例下载_登录案例java实现 ---- Java进阶篇
- JavaWeb在线聊天系统开发
- JavaEE初阶-计算机是如何工作的
- 仓储物流机器人:快仓、海柔创新“极速前进”
- ubuntu16.04使用umake安装pycharm-professional