【问题标题】:Lambda functions are better or iterations?Lambda 函数更好还是迭代更好?
【发布时间】:2012-03-15 10:58:20
【问题描述】:

在时间处理或内存使用等方面,迭代更好还是 lambda 函数更好?

例如:

x = [10, 20, 30]

for y in x:
    if y>10 or y<20:
        print y

这是更好的还是 lambda 函数? 我想要关于时间处理、内存使用或任何其他比较的答案。

【问题讨论】:

  • 为什么要投反对票?这太荒谬了。

标签: python list lambda


【解决方案1】:

迭代器和 lambda 是两个完全不同的东西。 lambda 是一个简单的内联函数,而迭代器是一个返回连续对象的对象。您的示例有两个主要问题:您正在测试 x 而不是 y 并且 x 中的所有值都将通过 y&gt;10 or y&lt;20。因此,纠正这些问题,您的示例可以使用迭代器 像这样的 lambda 编写:

for value in filter(lamdba y: y < 10 or y > 20, x):
    print(value)

您可以通过多种方式执行此操作,但就性能而言,这取决于您正在处理的数据、处理方式以及正在处理的数据量。请参阅 http://wiki.python.org/moin/PythonSpeed/PerformanceTips 以获取有用的指南。

【讨论】:

    【解决方案2】:

    对于您的情况,经典循环显然更好,因为您不想创建新列表或生成器。

    不创建这样的对象可以提高内存效率,不为每个元素调用函数可以提高性能。

    【讨论】:

      【解决方案3】:

      我发现列表理解符号比函数符号更容易阅读,尤其是随着要映射的表达式的复杂性增加。此外,列表推导的执行速度比使用 map 和 lambda 的解决方案快得多。这是因为调用 lambda 函数会创建一个新的堆栈框架,而列表推导式中的表达式会在不创建新堆栈框架的情况下进行评估。 >>http://python-history.blogspot.com/2010/06/from-list-comprehensions-to-generator.html

      换句话说,无论您在 lambda 和循环/理解/生成器之间进行选择,都使用后者。我想写你的例子最pythonic的方式是这样的

       print [y for y in x if y < 20]
      

      【讨论】:

        猜你喜欢
        • 2020-09-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-18
        • 1970-01-01
        • 1970-01-01
        • 2016-11-02
        • 1970-01-01
        相关资源
        最近更新 更多