Python学习------lambda表达式

一、认识lambda

  • lambda是一个表达式,而不是一个语句。
  • lambda的主体是一个单个表达式,而不是一个代码块。

lambda的使用方法是lambda表达式,即lambda argument_list: expression;其中lambda是关键词;argument_list是参数列表,lambda允许接收多个参数;expression是表达式,用来对参数进行计算返回的。而且这个表达式只能是一句,并不能扩展成一个多行的代码块。这意味着lambda中不会含有if... elif... else 或者 try... except等语句。argument_list:与expression中间由冒号(:)连接。

y = lambda x: x == 0

# 这个lambda相当于这个函数

def is_none(x):
    return x == 0

print(y(2))
print(is_none(2))
print(y(0))
print(is_none(0))

# 这里是结果
False
False
True
True

lambda与普通函数def的联系:lambda可以看做是简单的def,这个def有多简单呢?-----没有函数名,函数体只有一个return。
lambda的作用是创建一个匿名函数。这个函数默认只能用一次(因为他是匿名的呀,没有函数名的),但是我们可以把这个表达式赋值给一个变量,然后我们通过这个变量就能实现多次调用了。

y = lambda x: x > 3
print(y)
print(y(2))

# 这里是结果
<function <lambda> at 0x00000000020C2EA0>
False

lambda优点:
1、使用lambda可以省去定义函数的过程,让代码更加精简。
2、对于一些简单的,服用次数很少的函数,有时候给函数起个名字也是个难题,使用lambda不需要考虑命名的问题。
3、使用lambda在某些时候让代码更容易理解。因为函数体就在眼前,不需要再寻找函数的定义位置读函数。

lambda缺点:只能进行简单的任务。

二、经常与lambda一起玩的几个高级函数

1、map(function, iterable, ...)-------根据提供的函数对指定序列做映射。内置函数。Python2版本返回一个新列表,Python3.x版本返回一个迭代器

推荐一个网址,这个网址是一个map动画,可以更清楚map的工作流程:https://lambdabricks.github.io/animating-hofs/

iterable------一个或多个可迭代序列。
function------操作函数,用来对iterable里的每一个元素进行处理。

def Addtwo(x, y):
    return x + y

y = map(Addtwo, [1, 2, 3, 4], [10, 20, 30, 40])
print(y)
for i in y:
    print(i, end=',')

# 这里是结果
<map object at 0x00000000025AAA20>
11,22,33,44,

# 如果不定义函数,而是用lambda,结果也是一样的
yl = map(lambda x, y: x + y, [1, 2, 3, 4], [10, 20, 30, 40])
print(yl)
for i in yl:
    print(i, end=',')

# 这里是结果
<map object at 0x00000000028AAA20>
11,22,33,44,

2、reduce(function, iterable[, initializer])-------对于序列内所有元素进行累计操作。需要导入functools模块

函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。

function-----操作函数,有两个参数,对iterable里的元素进行操作。
iterable------tuple ,list ,dictionary, string等可迭代物,必需参数
initializer----初始值, 可选参数,若存在,则function第一次操作就不是iterable的第1、2个元素,而是initializer和第1个元素。

from functools import reduce

def Addtwo(x, y):
    return x + y

print(reduce(Addtwo, [1, 2, 3, 4, 5], 100))

# 这里是结果
115

# 如果用lambda表达式
print(reduce(lambda x, y: x + y, [1, 2, 3, 4, 5]))

# 这里是结果
15

3、filter(function, iterable)------对于序列中的元素进行筛选,最终获取符合条件的序列。内置函数。Python2版本返回一个新列表,Python3.x版本返回一个迭代器

function-----判断函数
iterable------可迭代序列

from functools import reduce

def is_odd(n):
    return n % 2 == 1

result1 = filter(is_odd, [1, 2, 3, 4, 5])
print(result1)
for i in result1:
    print(i, end=',')

# 这里是结果
<filter object at 0x00000000028ADCF8>
1,3,5,


result2 = filter(lambda n: n % 2 == 1, [1, 2, 3, 4, 5])
print(result2)
for i in result2:
    print(i, end=',')
# 这里是结果
<filter object at 0x00000000028B60F0>
1,3,5,

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值