我可以在这里使用 lambda 表达式吗?
Posted
技术标签:
【中文标题】我可以在这里使用 lambda 表达式吗?【英文标题】:Can i use a lambda expression here? 【发布时间】:2017-06-15 01:46:20 【问题描述】:在这个示例程序中,我将第 0 天到第 6 天命名,其中第 0 天是星期日,第 6 天是星期六。我想知道我是否可以在这里使用 lambda 表达式来表示开始日期和逗留时间,并且仍然返回我将返回的星期几。在像这样的简单示例中,我无法理解如何使用 lambda 表达式。
starting_day = 3
length_of_stay = 10
end_day = (starting_day + length_of_stay) % 7
print("You will come back on day: ", end_day)
【问题讨论】:
一个 lambda 表达式用于定义匿名 函数。可以这么说,您在这段代码中的什么地方定义了您想要“匿名化”的函数? 这似乎倒退了。您有一个解决方案 (lambda),现在您正试图找到一个可以使用它的问题? @melpomene 出于学习目的,这绝对是合适的。在实际使用工具之前,必须先了解它的用途。 我不明白,你已经有办法了…… 这个问题的挑战在于没有充分的理由在这里定义一个 lambda。 lamdbas 是函数,需要调用它们才能有用。当您想要将函数传递给想要使用回调的其他函数时,通常会使用它们。您可以在打印时使用表达式print("You will come back on day: ", (starting_day + length_of_stay) % 7)
,但使用 lambda print("You will come back on day: ", (lambda start, length: (start + length) % 7)(starting_day, length_of_stay))
会很愚蠢。
【参考方案1】:
在考虑如何为此编写 lambda 函数之前,请考虑如何编写普通函数。它可能看起来像这样:
def day_of_return(starting_day, length_of_stay):
return (starting_day + length_of_stay) % 7
然后您可以轻松地将其转换为 lambda 函数:
day_of_return = lambda starting_day, length_of_stay: (starting_day + length_of_stay) % 7
或者,使用更短的变量名:
day_of_return = lambda s,l: (s+l) % 7
然后你可以这样称呼它:
print(day_of_return(3,10))
编辑:在 cmets 中,@daragua 指出将 lambdas 分配给变量类型违背了 lambda 的目的,因此您也可以完全删除分配:
print((lambda s,l: (s+l) % 7) (3,10)) # This will print 6
【讨论】:
好吧,将 lambdas 分配给变量 is considered an anti-pattern 本质上是出于调试原因,并且它违背了anonymous
函数的概念 :)
@ChristopherHumbert 很高兴!如果此处的答案解决了您的问题,如果您不介意,请将其标记为已接受:)【参考方案2】:
Lambda 是函数,而不是表达式。它们可以在任何使用函数的地方使用。它们通常是匿名的并且非常简短。
【讨论】:
虽然 lambda 是使用 lambda expressions 定义的。以上是关于我可以在这里使用 lambda 表达式吗?的主要内容,如果未能解决你的问题,请参考以下文章