lambda

lambda在定义简单函数时非常有用,常用于微型函数和回调。然而,它限制为单行表达式,不支持多行语句、条件分支、迭代和异常处理。尽管有这些限制,但在适当场景下,lambda提供了简洁的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍

lambda在完成简单函数的定义时很有作用,如编写微型函数来对各种表达式简单求值,或者需要用户提供回调函数的时候。但是lambda的局限性也是有的,如lambda只能指定一条单独的表达式,而且这个表达式的结果作为lambda的返回值。所以就有无法执行多行语句,条件分支,迭代和异常处理的缺点。当然我们会在其优势时使用,缺点时使用Python逻辑就好,不是么。

规则

书写

func = lambda x, y : x + y 
# func:lambda返回的函数引用
# x, y 形参
# x + y 函数体
result = func(3, 5)	# 调用,result = 8

形参规则

1、lambda表达式的形参是一个自由变量,意思是只在执行时绑定形参
2、执行时绑定,相同lambda创建的同时绑定
3、可以实现定义时绑定形参,不过形参定义为 x=x, y=y的形式,而且被绑定的形参不要再在调用时传参

# 例子
x = y = 10
func1 = lambda x, y : x + y
x = y = 15
func2 = lambda x, y : x + y
# 解析:func1和func2使用相同的lambda表达式创建,形参规则 1,2
>> func1(x, y)	# 结果是 30
>> func2(x, y)	# 结果是 30
x = y = 20
>> func1(x, y)	# 结果是 40
# 例子
x = y = 10
func1 = lambda x, y=y : x + y
x = y = 15
func2 = lambda x, y=y : x + y
# 解析:func1和func2使用相同的lambda表达式创建,形参规则 2,3
>> func1(x)	# 结果是 25
>> func2(x)	# 结果是 30
# tips! x在执行时绑定最新的x值,y在定义是绑定y的值,注意调用时不再传递y的值

重要例子

funcs1 = [lambda x: x+n for n in range(5)]
funcs2 = [lambda x, n=n: x+n for n in range(5)]
for index in range(5):
	print('funcs1[%s](%s):' %(index, 0),funcs1[index](0))
	print('funcs2[%s](%s):' %(index, 0),funcs2[index](0))
	print('*************')
# tips! funcs通过列表推导式创建列表,列表内容是lambda返回的函数引用
# 引用的每个参数符合 参数规则1,2,3
# funcs1和funcs2的区别是执行时赋值和声明时赋值

# 结果
funcs1[0](0): 4
funcs2[0](0): 0
*************
funcs1[1](0): 4
funcs2[1](0): 1
*************
funcs1[2](0): 4
funcs2[2](0): 2
*************
funcs1[3](0): 4
funcs2[3](0): 3
*************
funcs1[4](0): 4
funcs2[4](0): 4
*************
# 解析:funcs1中n为调用时传参,调用时n衡为4.funcs2中n为声明时传参,是变化的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值