如何在Python return语句中使用双括号?

问题描述 投票:0回答:2

我不明白foo()函数如何处理这2个lambda,这3个函数由togheter执行阶乘计算。

def foo(f):
return (lambda x: x(x))(lambda x: f(lambda *args: x(x)(*args)))


def bar(f):
    return lambda n: (1 if n < 2 else n * f(n - 1))


def baz(n):
    return foo(bar)(n)

print(baz(7))

输出:

5040

从baz()函数开始。我从未见过在同一return语句中使用两个参数但使用双括号的语法,我正在尝试研究一个示例,但现在不知道如何开始。有人可以帮我理解这里的逻辑吗?

function recursion lambda python-3.7 factorial
2个回答
0
投票

我发现这样做:

print(foo(bar)(7))

还将返回5040

所以,语法中的双括号是这样的吗?

function_1(function_2)(argument))

我不知道这是调用函数的有效方法


0
投票

让我们从语法开始。此调用foo(bar)返回一个函数。然后使用参数7foo(bar)(7)调用它。您可以将print(foo(bar)(7))改写为

f = foo(bar)
print(f(7))

代码本身是一个难题。实际上,这类难题最好由代码本身来解释。如果有人用简单的英语写出整个逻辑,那么没人会理解。尽管可以解释基本概念。函数bar获取一个函数作为参数并返回一个函数。显然,参数和返回的函数都应该等效。它来自阶乘递归定义。因此,foo是调用此函数结果的理想方法。如果您真的想了解它是如何工作的,建议您将lambda重写为普通函数。

© www.soinside.com 2019 - 2024. All rights reserved.