有没有理由使用lambda函数而不是列表理解?

时间:2013-02-10 12:24:22

标签: python

我刚开始是一名Python程序员。在进行Python挑战时,我通过在我自己解决之后查看其他人的解决方案来学习很多语言。

我看到lambda函数到处都是。它们看似简单,但也不那么容易阅读(至少现在对我来说)。

使用lambda函数比其他东西有什么价值吗?我想知道在学习曲线的早期是否值得学习这些东西!

4 个答案:

答案 0 :(得分:2)

你在需要它们的地方使用lambdas,并且当它们更合适时你使用列表推导,生成器表达式等。

lambda是一个单表达式函数,可以多次使用,也可以作为一种回调。它可以产生单个值以及复杂值。

列表理解是您评估一次然后根据需要使用它的操作。您将获得包含生成值的列表并使用它。

生成器表达式(我在此处提到它)是一个生成器(可迭代),您可以创建它然后使用一次:在循环中,在另一个生成器表达式中,在列表解析中,甚至用于返回。

您甚至可以将这些内容组合起来,如下所示:

f = lambda n: [i for i in range(n, 2*n)]
g = (i * 2 for i in f(10))
l = [i * i for i in g]

ll = lambda n: [i * i * 2 for i in f(n)]

答案 1 :(得分:0)

Lambda在需要时使用,当它们使代码更简洁但不太清晰时,依此类推。他们并不真正与列表理解(或任何其他理解)竞争。如果您发现Python中的可读性较低,您可能应该将其更改为更易读的内容。

答案 2 :(得分:0)

lambda calculus完整是一件非常酷的事情。你应该尽早习惯这些概念,因为它们会让你思考更广泛。 首先,我建议阅读

http://www.secnetix.de/olli/Python/lambda_functions.hawk

Why are Python lambdas useful?

Lambda函数通常用于支持列表推导,因为它们产生的代码更少,更容易阅读(如果你曾经习惯它)并且是单行代码。

答案 3 :(得分:0)

  

使用Lamba函数对其他东西有什么价值吗?

有时您希望创建非常短的函数,但实际上并不想命名它们。例如,我将它们用于函数回调。

some_system.add_modifier(lambda x, y, z: return (x*2, y*2, z*2))

与所提出的其他评论一样,这不是选择其中任何一个问题,而只是学习该语言的一些关键机制。当然,这并不意味着必须始终使用该功能,但了解它确实很好。

  

我想知道在学习曲线的早期是否值得学习这些东西!

我会说要了解它,但在你觉得舒服的地方使用它。程序员通常会学习他们学到的新功能。 :)