我正在尝试找出 Python lambdas。是lambda那些在现实生活中应该被遗忘的“有趣”的语言项目之一吗?
lambda
我确信在某些极端情况下可能需要它,但鉴于它的模糊性,它有可能在未来的版本中被重新定义(我的假设基于它的各种定义)以及降低的编码清晰度 - 如果它避免?
这让我想起了 C 类型的溢出(缓冲区溢出)——指向顶部变量并重载以设置其他字段值。感觉有点像技术人员的表演,但维护编码员的噩梦。
你在谈论lambda 表达式吗?喜欢
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 的倍数的元素。这比
mult3
[3, 6, 9]
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]
(甚至是 as range(3,10,3)),但还有许多其他更复杂的用例,您不能使用列表推导式,而 lambda 函数可能是写出某些内容的最短方法。
range(3,10,3)
>>> def transform(n):
… return lambda x: x + n …
f = transform(3) f(4) 7
这通常用于创建函数包装器,例如 Python 的装饰器。
将可迭代序列的元素与reduce()
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 函数。我花了一段时间才习惯它们,但最终我明白它们是语言中非常有价值的一部分。