Lambda函数更好还是迭代?

时间:2012-03-15 10:58:21

标签: python list lambda

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

例如:

x = [10, 20, 30]

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

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

3 个答案:

答案 0 :(得分:5)

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

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

有几种方法可以做到这一点,但就性能而言,它取决于您正在处理的数据,处理方式以及您处理的数据量。有关实用指南,请参阅http://wiki.python.org/moin/PythonSpeed/PerformanceTips

答案 1 :(得分:3)

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

不创建这样的对象会使它更具内存效率,并且不为每个元素调用函数会使其更具性能。

答案 2 :(得分:1)

  

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

换句话说,无论你是否在lambda和loop / comprehension / generator之间做出选择,都要使用后者。我想编写你的例子的最pythonic方式就像是

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