python之lambda函数使用

一,lambda函数的概念
lambda函数被称为匿名函数,实际就是说没有名称的函数,形式如下:

lambda [arg1 [,arg2,.....argn]]:expression

args指的是参数,expression指条件表达式,根据参数,进行条件表达后输出相应内容。

二,lambda简单使用

普通用法

def detail(x,y):
    return x*y
# lambda用法    
s = lambda x,y:x*y
print(s(3,3))

以上对比我们可以看出如果我们想计算两个数的乘积,需要定义一个函数,传入两个形参,然而lambda也是直接传入两个形参。后面使用冒号,写入表达式,即可得到我们所需要的结果。

lambda还可以写成以下几种方式:

lambda X:None          # 函数没有输入参数,输出是None
lambda *args: sum(args)    # 输入是任意个数参数,输出是它们的和(隐性要求输入参数必须能进行算术运算)
lambda *kwargs: 1      # 输入是任意键值对参数,输出是1

以下实例可以帮我们更好的理解这一用法:

import time
time.sleep = lambda X:None # 将等待时间设置内容为空
time.sleep(5) # 并不会等待5秒

answer = lambda *args: sum(args)  # 求和
answer(1,2,3)   # 得到结果为1+2+3=6

exzample = lambda *kwargs: 1   #设置返回为1
exzample(1,2,3,4)    # 得到结果为1

三,lambda结合python内置函数高阶用法
lambda常用高阶函数:

map()函数

reduce() 函数

sorted() 函数

filter() 函数

map()函数:

map() 会根据提供的括号内函数对给出的序列做一一映射。map(function,iterable,…),这个是map函数的形式,function为所指定的函数,iterable为所提供的序列,可为多个序列。

sp = lambda x:x**2    # 定义一个lambda函数
sq = map(sp,[2,3,4,5])   # 结合map()函数使用,依次对列表中的数据求平方
print([i for i in sq])   # 循环打印出sq中的数据

以上代码我们可以看到sp为指定的函数,后面的列表为提供的序列,得到的sq是一个迭代器,使用python2.X的版本可直接得到一个list列表,python3.X的版本是一个迭代器,我们需要循环打印出里面的数据。我们还可以使用多个序列:

sp = lambda x,y:x*y
sq = map(sp,[2,3,4],[3,4,5])
print([i for i in sq])

序列直接存在一一对应关系,得出结果为6,12,20。

reduce() 函数:

reduce() 函数会对参数序列中元素进行累积计算。reduce(function, iterable[, initializer]),function为指定的函数。

from functools import reduce   # 引入reduce函数
sp = lambda x,y:x*y     # 定义两个数相乘
sq = reduce(sp,[2,3,4])  # 结果计算实际为,2*3*4,输出结果为24

reduce实际运行原理,就是前面的数据对后面的数据累加进行function函数的运算。

from functools import reduce
# 实例1
sp = lambda x,y:x+y
sq = reduce(sp,[2,3,4])   # 输出结果为9
# 实例2
st = lambda x,y:x*10+y
sa = reduce(st,[1,2,3,4]) # 计算过程为1*10+2-->12*10+3-->123*10+4,输出结果为1234

sorted() 函数:

sorted() 函数对所有可迭代的对象进行排序操作,语法类型为sorted(iterable[,…],key[, reverse]]]),iterable为提供的序列,key[,reverse]指根据什么进行排序,排序的规则,reverse = True 降序 , reverse = False 升序(默认)。

list1 = [3,4,1,6,8,4]
list2 = sorted(list1)  # 对list1按照0-9排序,结果为[1, 3, 4, 4, 6, 8]

以上是对单字符类型的数据进行排序,下面看下多类型的:

L=[('b',4),('a',3),('c',2),('d',1)] 
# x[1]实际是根据里面每个元组的下标进行排序
M = sorted(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[1]) 
# 以上W的结果输出为[('a', 3), ('b', 4), ('c', 2), ('d', 1)],根据字母a-z排序

我们还可以按照两种及多种的排序的规则进行排序:

students = [('jahn', 'A', 15), ('jahn', 'B', 12), ('dave', 'B', 10)]
s = sorted(students,key=lambda x:[x[0],x[1]])
# 输出结果为[('dave', 'B', 10), ('jahn', 'A', 15), ('jahn', 'B', 12)]

以上我们可以看到,是按照X[0],X[1],意思是指,先根据下标0排序,当遇到重复情况下,再依次进行下标为1的排序。

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)]

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 = filter(sp,[2,3,4,6,7])
print([i for i in sq])  # 输出结果为[3,6]

以上内容均为lambda匿名函数的基础用法及与其他高阶函数的混合用法,遵循IT界的说法,能用一行代码解决的事,咱就尽量不用两行!
在这里插入图片描述

  • 11
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值