lambda --定义匿名或内联函数 --并且实现绑定变量的值

本文深入探讨了Python中lambda表达式的应用,包括如何使用lambda表达式替代简单的函数定义,以及在排序和数据处理中的具体实践。文章还详细解释了lambda表达式中变量绑定的机制,并提供了避免常见陷阱的解决方案。
摘要由CSDN通过智能技术生成

问题:需要提供一个短小的回调函数为sort()这样的操作使用,但是又不想通过def语句编写一个单行的函数

解决方案:像这种仅仅完成表达式求值的简单函数可以通过lambda表达式来替代
# 示例1:
add = lambda x, y: x + y
print(add(1, 2))  # 3

# 示例2:lambda表达式可用在如下的上下文环境中,比如排序或者对数据新进行整理时
names = ['a', 'b', 'kj', 'iuo']
print(sorted(names, key=lambda name: name.lower())) # ['a', 'b', 'iuo', 'kj']
问题: 我们利用lambda表达式定义一个匿名函数,但是也希望可以在函数定义的时候完成对特定变量的绑定

下面看下lambda表达式中是如何绑定变量的:

# 示例1:
x = 10
a = lambda y: x+y
x = 20
b = lambda y: x+y

print(a(10))  # 30  # 原因分析:lambda表达式中用到x是一个自由变量,在运行的时候绑定而不是定义的时候绑定
print(b(10))  # 30
解决方案:如果希望匿名函数可以在定义的时候绑定变量,并且保持值不变,那么可以将那个值作为默认参数实现
x = 10
a = lambda y, x=x: x+y
x = 20
b = lambda y, x=x: x+y
print(a(10))  # 20
print(b(10))  # 30

本节中提到的问题较容易出现在对lambda函数过于聪明的应用上。比方说,通过列表推导来创建一列lambda表达式,实例代码如下:

funds = [lambda x: x+n for n in range(3)]
for f in funds:
    print(f(0))  # 2, 2, 2

funds = [lambda x, n=n: x+n for n in range(3)]  # 给个默认参数,在定义lambda匿名函数的时候就把n绑定了
for f in funds:
    print(f(0))  # 0, 1, 2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值