我可以在这里使用 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 表达式吗?的主要内容,如果未能解决你的问题,请参考以下文章

我可以在保留 lambda 表达式的同时删除双重评估吗

可以在 pandas apply 方法中使用 lambda 表达式吗?

Java8新特性Lambda表达式基础语法,都在这儿了!!

计划中的 lambda 有啥意义?

你真的了解Lambda表达式吗?

`fun` lambda 表达式有速记语法吗?