Python lambdas为什么有用?

发布于 2021-02-02 23:23:31

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

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

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

关注者
0
被浏览
121
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。
    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函数。我花了一段时间来习惯它们,但最终我了解到它们是语言中非常有价值的一部分。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看