64 lambda 表达式

lambda 表达式常用来声明匿名函数,即没有函数名字的临时使用的小函数,常用在临时需要一个类似于函数的功能但又不想定义函数的场合。

lambda 表达式只可以包含一个表达式,不允许包含其他复杂的语句,但在表达式中可以调用其他函数,该表达式的计算结果相当于函数的返回值。

f = lambda x, y, z: x + y + z  # 可以给 lambda 表达式起一个名字
print(f(1, 2, 3))  # 把 lambda 表达式当作函数使用

g = lambda x, y=2, z=3: x + y + z  # 支持默认值参数
print(g(1))
print(g(2, z=4, y=5))  # 调用时使用关键参数

L = [(lambda x: x ** 2), (lambda x: x ** 3), (lambda x: x ** 4)]
print(L[0](2), L[1](2), L[2](2))

D = {'i': (lambda: 2 + 3), 'j': (lambda: 2 * 3), 'k': (lambda: 2 ** 3)}
print(D['i'](), D['j'](), D['k']())

s = [1, 2, 3, 4, 5]
print(list(map(lambda i: i + 10, s)))  # lambda 表达式作为函数参数

在这里插入图片描述

def func(i):
    return i * i


func(5)
s = [1, 2, 3, 4, 5]
print(list(map(lambda i: func(i), s)))  # lambda表达式中可以调用函数

在这里插入图片描述

data = list(range(20))
import random

random.shuffle(data)
print(data)
data.sort(key=lambda x: x)  # 用在列表的sort方法中,作为函数参数
print(data)
data.sort(key=lambda x: len(str(x)))  # 使用 lambda 表达式指定排序规则
print(data)
data.sort(key=lambda x: len(str(x)), reverse=True)  # 使用 lambda 表达式指定排序规则
print(data)

在这里插入图片描述

在使用 lambda 表达式时,要注意变量作用域可能带来的问题。

s = []
for i in range(10):
    s.append(lambda j=i: j ** 2)
print(s[0](), s[1](), s[-2](), s[-1]())

在这里插入图片描述

在这里插入图片描述

# 相当于只有一条 return i 语句的小函数
f = lambda: i
i = 3

# 调用时真正的返回值取决于全局变量i的值
print(f())

i = 5
print(f())

在这里插入图片描述

虽然使用 lambda 表达式可以很方便灵活地定义一些小函数,但是,如果仅仅是需要一个简单的运算,那么应该尽量使用标准库 operator 中提供的函数,避免自己定义 lambda 表达式,operator 中的函数执行效率更高一些。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我还记得那天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值