一尘不染

Python lambdas为什么有用?

python lambda

我正在尝试找出Python lambda。lambda是在现实生活中应该被遗忘的那些“有趣”语言项目之一吗?

我敢肯定,在某些情况下可能需要使用它,但是鉴于它的晦涩之处,在将来的发行版中重新定义了它的潜力(根据各种定义我的假设)以及降低的编码清晰度-是否应该被避免?

这让我想起了C类型的溢出(缓冲区溢出)-指向顶部变量,并通过重载来设置其他字段值。感觉像是技术娴熟的演艺风格,但却是维护编码员的噩梦。


阅读 366

收藏
2020-02-08

共1个答案

一尘不染

lambda x: x**2 + 2*x - 5

这些东西实际上很有用。Python支持一种称为函数式编程的编程风格,你可以在其中将函数传递给其他函数来完成工作。例:

mult3 = filter(lambda x: x % 3 == 0, [1, 2, 3, 4, 5, 6, 7, 8, 9])

设置mult3为[3, 6, 9],原始列表中那些是3的倍数的元素。此元素比(可能会说更清楚)短于

def filterfunc(x):
    return x % 3 == 0
mult3 = filter(filterfunc, [1, 2, 3, 4, 5, 6, 7, 8, 9])

当然,在这种情况下,你可以做与列表理解相同的事情:

mult3 = [x for x in [1, 2, 3, 4, 5, 6, 7, 8, 9] if x % 3 == 0]

(或什至range(3,10,3)),但是在许多其他更复杂的用例中,你不能使用列表推导,而lambda函数可能是写出东西的最短方法。

从另一个函数返回一个函数

>>> def transform(n):
...     return lambda x: x + n
...
>>> f = transform(3)
>>> f(4)
7

这通常用于创建函数包装器,例如Python的装饰器。

将可迭代序列的元素与 reduce()

>>> reduce(lambda a, b: '{}, {}'.format(a, b), [1, 2, 3, 4, 5, 6, 7, 8, 9])
'1, 2, 3, 4, 5, 6, 7, 8, 9'

按备用键排序

>>> sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=lambda x: abs(5-x))
[5, 4, 6, 3, 7, 2, 8, 1, 9]

我定期使用lambda函数。我花了一段时间来习惯它们,但最终我了解到它们是语言中非常有价值的一部分。

2020-02-08