lambdas 有何用处?[已关闭]

2022-09-05 01:11:22

我试图弄清楚Python lambdas。在现实生活中,那些“有趣”的语言项目之一是否应该被遗忘?lambda

我确信有一些边缘情况可能需要它,但考虑到它的晦涩难懂,它在未来版本中被重新定义的潜力(我基于它的各种定义的假设)以及降低的编码清晰度 - 应该避免吗?

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


答案 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])

设置为 ,原始列表中 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]

(或者甚至作为 ),但是还有许多其他更复杂的用例,你不能使用列表理解,lambda函数可能是写出东西的最短方法。range(3,10,3)

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

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


答案 2

lambda只是一种花哨的说法。除了它的名字,它没有什么晦涩难懂,令人生畏或神秘的。当您阅读以下行时,请在脑海中替换为:functionlambdafunction

>>> f = lambda x: x + 1
>>> f(3)
4

它只是定义了 的函数。其他一些语言,如 ,明确指出:xR

> f = function(x) { x + 1 }
> f(3)
4

你看?这是编程中最自然的事情之一。