小编典典

lambdas 有什么用?

all

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

我确信在某些极端情况下可能需要它,但鉴于它的模糊性,它有可能在未来的版本中被重新定义(我的假设基于它的各种定义)以及降低的编码清晰度 - 如果它避免?

这让我想起了 C 类型的溢出(缓冲区溢出)——指向顶部变量并重载以设置其他字段值。感觉有点像技术人员的表演,但维护编码员的噩梦。


阅读 100

收藏
2022-02-28

共1个答案

小编典典

你在谈论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 的倍数的元素。这比

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 函数可能是写出某些内容的最短方法。

  • 从另一个函数返回一个函数
      >>> 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 函数。我花了一段时间才习惯它们,但最终我明白它们是语言中非常有价值的一部分。

2022-02-28