lambda函数也叫匿名函数,lambda函数也叫匿名函数
一、lambda function匿名函数的概念是不需要显式指定函数名。
关键字lambda表示匿名函数,冒号前面的N表示函数参数,可以有多个参数。
匿名函数有一个限制,就是只能有一个表达式,不需要写return。返回值是该表达式的结果。
使用匿名函数有一个好处,因为函数没有名字,所以不用担心函数名冲突。另外,匿名函数也是一个函数对象。您也可以将匿名函数赋给变量,然后使用该变量调用该函数:
有些函数在代码中只使用一次,函数体比较简单。使用匿名函数可以减少代码量,看起来更优雅。Lambda函数被称为匿名函数,实际上是指没有名字的函数。其形式如下:
[arg 1[,arg2,argn]]: expression args是指参数,expression是指条件表达式。根据参数,条件表达式后输出相应的内容。
匿名函数返回的结果是expression条件表达式的结果。
二、lambda简单使用#常见用法
定义细节(x,y):
返回x*y
#使用
s=x,y:x*y
Print(s(3,3))从上面的比较可以看出,如果要计算两个数的乘积,需要定义一个函数,传入两个参数。然而,lambda也直接传入两个参数。使用冒号并写出表达式来得到我们需要的结果。
Lambda也可以用以下方式编写:
Lambda X:None #函数没有输入参数,输出为None。
Lambda *args: sum(args) #输入是任意数量的参数,输出是它们的和(隐含地,输入参数必须能够进行算术运算)
Lambda **kwargs: 1 #输入是任意键值对参数,输出是1。下面的例子可以帮助我们更好地理解这种用法:
导入时间
Time.sleep=lambda X:None #将等待时间设置为空。
Time.sleep(5) #不会等待5秒钟
答案=lambda *args: sum(args) # sum
回答(1,2,3) #结果是1 2 3=6
Exzample=lambda **kwargs: 1 #设置返回到1。
Exzample(a=2,b=4) #结果是1。三、lambda结合python内置函数高阶用法lambda常用高阶函数:
Map()函数reduce()函数sorted()函数filter()函数map()函数:map()函数接收两个参数,一个是函数,另一个是Iterable。map将传入函数依次应用于序列的每个元素,并将结果作为新的迭代器返回。
遍历序列,对序列中的每个元素进行函数运算,最终得到一个新的序列。
Map()将根据括号中提供的函数对给定的序列逐一进行映射。Map(函数,可迭代,),这是map函数的形式,function是指定的函数,iterable是提供的序列,可以是多个序列。
sp=x:x * * 2 #定义一个函数
Sq=map(sp,[2,3,4,5]) #与map()函数结合使用,依次对列表中的数据求平方。
Print([i for i in sq]) #循环打印出sq 1中的数据。找到列表[1,2,3,4,5,6,7,8,9]并返回n * n的列表。
#通用解决方案
李=1,2,3,4,5,6,7,8,9
对于ind,枚举中的值(li):
li[ind]=val * val
打印(李)
# [1, 4, 9, 16, 25, 36, 49, 64, 81]
#高级解决方案
李=1,2,3,4,5,6,7,8,9
打印(列表(映射(x:x * x,li)))
# [1,4,9,16,25,36,49,64,81] reduce()函数:reduce对一个序列[x1,x2,x3,],这个函数必须接收两个参数。Reduce用序列的下一个元素继续累积计算的结果,其效果是:
Reduce(func,[1,2,3])等价于func(func(1,2),3)
累加序列中的所有元素。
从functools导入reduce #引入了reduce函数
定义两个数的乘积
Sq=reduce(sp,[2,3,4]) #实际结果计算为,2*3*4,输出结果为24reduce。实际操作原理是前面的数据累加后面的数据,进行函数function操作。
从functools导入减少
#示例1
sp=x,y:x y
Sq=reduce(sp,[2,3,4]) #输出结果是9
#示例2
ST=x,y:x*10 y
Sa=reduce(st,[1,2,3,4]) #计算过程为1 * 102-12 * 103-123 * 104,输出结果为1234。
Sorted()函数:Sorted (iterable,/,*,key=none,reverse=false)接收一个key函数来定制iterable对象的排序。
迭代对象:主要与列表、字符串、祖先、集合和字典相关。
Key:接受一个函数,根据这个函数返回的结果进行排序。
反向:排序方向,默认从小到大,reverse=True为反向。
sorted()函数对所有iterable对象进行排序,语法类型是排序的(iterated [,],key [,reverse]]),迭代的是提供的序列,key[,reverse]是指按照什么排序,排序规则;Reverse=真降序,reverse=假升序(默认)。
列表1=[3,4,1,6,8,4]
List2=sorted(list1) #按0-9对list1排序,结果是[1,3,4,4,6,8]。以上是单字符数据的排序。让我们来看看多种类型:
L=[(b ,4),( a ,3),( c ,2),( d ,1)]
# x[1]实际上是按照其中每个元组的下标排序的
M=已排序(L,key=lambda x:x[1])
#我们可以看到,当其中每个元组的下标为1时,是一个数,4,3,2,1,所以结果是
# [(d ,1),( c ,2),( a ,3),( b ,4)]
W=sorted(L,key=lambda x:x[0])
#上述W的结果输出为[(a ,3),( b ,4),( c ,2),( d ,1)]。根据字母a-z,我们还可以根据两个或多个排序规则进行排序:
学生=[(jahn , A ,15),( jahn , B ,12),( dave , B ,10)]
s=已排序(学生,key=lambda x:[x[0],x[1]])
#输出结果为[(Dave , B ,10),( Jahn , A ,15),( Jahn , B ,12)]。从上面可以看出,它们是按照X[0],X[1]排序的,也就是说先按照下标0排序。
L=[(b ,4),( a ,3),( c ,2),( d ,1)]
M=sorted (l,key=lambda x: x [0],reverse=true) # reverse=true。
#输出结果为[(d ,1),( c ,2),( b ,4),( a ,3)] #将下列单词按字母顺序排列。
李=[坏,关于,动物园,信用]
打印(排序(li,key=lambda x : x[0]))
# Output [Credit , Zoo , about , bad]
根据ASCII的大小来比较排序字符串。因此,大写字母Z将出现在小写字母A之前,因为有 Z a 。
#假设我们用一组元组来表示学生姓名和成绩:
L=[(鲍勃,75),(亚当,92),(巴特,66),(丽莎,88)]
#请用sorted()按名称对上述列表进行排序。
打印(排序(L,key=lambda x : x[0]))
#输出[(亚当,92),(巴特,66),(鲍勃,75),(丽莎,88)]
#然后按等级从高到低排序。
打印(排序(L,key=lambda x : x[1],reverse=True))
#输出[(亚当,92),(丽莎,88),(鲍勃,75),(巴特,66)]
Filter()函数:filter()也接收一个函数和一个序列。与map()不同,filter()依次作用于每个元素,然后根据返回值是真还是假来决定是保留还是丢弃该元素。
对序列中的元素进行筛选,最终得到满足条件的序列。
filter()函数用于过滤掉不符合的序列,保留符合函数规则的序列输出。语法类型是filter(function,iterable)。
#示例1
Sp=lambda x: x 5 #定义函数需要大于5
Sq=filter(sp,[2,3,4,6,7]) # sq是一个迭代器,需要遍历结果。
Print([i for i in sq]) #输出结果为[6,7]
#示例2
Sp1=lambda x: x%3==0 #判断是否能被3整除的数字。
sq1=筛选器(sp1,[2,3,4,6,7])
Print([i for i in sq1]) #输出结果为[3,6]#在一个列表中,删除偶数,只保留奇数。
李=[一,二,四,五,六,九,十,十五]
print(list(filter(lambda x:x % 2==1,Li))#[1,5,9,15]
# Return number指从左到右和从右到左读取的相同数字,例如12321,909。请使用filter()筛选出退货数量。
li=列表(范围(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]
期待陌生,拥抱惊喜。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。