将lambda赋给表达式以进行递归?(PEP8)

2024-06-01 06:35:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道PEP8命令不给表达式赋值lambda,因为它忽略了lambda函数的全部点。在

但是递归lambda函数如何呢?我发现在很多情况下,用lambda将其赋给表达式而不是定义函数来进行递归是非常简单、干净和高效的。pep8没有提到递归lambda。在

例如,让我们比较一个函数,该函数返回两个数字之间的最大公约数:

def gcd(a,b):
    if b == 0:
        return a
    return gcd(b, a % b)

^{pr2}$

那么,我该怎么办?在


Tags: lambda函数命令returnif定义表达式def
3条回答

您的问题有点“作弊”,因为常规函数也可以这样重写:

def gcd(a,b):
    return a if b == 0 else gcd(b, a % b)

几乎和lambda版本一样短,甚至可以进一步压缩成一行,但要牺牲可读性。在

lambda语法通常用于简单的匿名函数,这些函数通常作为参数传递给其他函数。将lambda函数赋给变量没有多大意义,这只是声明命名函数的另一种方式,但可读性较差,而且更受限制(不能在其中使用语句)。在

因此,如果你不这么做的话,我建议你这样做是没有道理的。在

如果将lambda分配给变量,则无法将其作为参数传递,也无法在同一行中返回它,这正是lambda的确切用途。在

使用普通函数定义。与lambda相比,使用lambda绝对没有任何好处,而且普通函数定义(对于大多数人)更具可读性。使用lambda时,您什么都得不到,但是您经常会失去可读性。在

我建议你阅读this答案。递归不会改变任何东西。事实上,在我看来,它更倾向于正常。在

相关问题 更多 >