Python 这些嵌套的lambda函数是如何工作的?

Python 这些嵌套的lambda函数是如何工作的?,python,function,lambda,Python,Function,Lambda,这个代码是做什么的?适当的n,f和x是什么 def successor(n): return lambda f: lambda x: f(n(f)(x)) 所以这个。。。这是非常糟糕的代码。你不应该写它,因为正如你发现的和评论部分所指出的,很难说出发生了什么。让我们把它分解一下 原始代码如下所示 def successor(n): return lambda f: lambda x: f(n(f)(x)) 函数后继函数正在使用lambda返回一个值。这很难理解,所以让我们用一

这个代码是做什么的?适当的n,f和x是什么

def successor(n):
    return lambda f: lambda x: f(n(f)(x))

所以这个。。。这是非常糟糕的代码。你不应该写它,因为正如你发现的和评论部分所指出的,很难说出发生了什么。让我们把它分解一下

原始代码如下所示

def successor(n):
    return lambda f: lambda x: f(n(f)(x))
函数后继函数正在使用lambda返回一个值。这很难理解,所以让我们用一个命名函数替换它

def successor(n):
    def inner_function_one(f):
        return lambda x: f(n(f)(x))
    return inner_function_one
def successor(n):
    def inner_function_one(f):
        def inner_function_two(x):
            return f(n(f)(x))
        return inner_function_two
    return inner_function_one
这仍然很难理解。让我们用命名函数替换另一个匿名函数

def successor(n):
    def inner_function_one(f):
        return lambda x: f(n(f)(x))
    return inner_function_one
def successor(n):
    def inner_function_one(f):
        def inner_function_two(x):
            return f(n(f)(x))
        return inner_function_two
    return inner_function_one
现在我们已经分解了这个函数,我们可以看到后继函数返回一个函数,这个函数又返回另一个函数,这个函数返回。。。那个fnfx这行字很难读。这意味着函数f是用参数nfx调用的,这是一种表示nf返回一个函数,然后将该函数传递给参数x的方式。让我们使用一些更具描述性的变量名来了解这里发生了什么

def successor(first_function):
    def inner_function_one(second_function):
        def inner_function_two(arg):
            return second_function(first_function(second_function)(arg))
            # Equivalent to something like
            #     return second_function(returned_function(arg))
            # where returned_function is the result of 
            #     first_function(second_function)
        return inner_function_two
    return inner_function_one
至于这里具体发生了什么?我不知道。你得问问是谁写的代码。然而,我猜这是为了成为某种装饰师。有一个类似的例子

这允许您使用传递给decorator的参数,以便在函数的实际decorator中使用。调用下面的函数

@decoratorFunctionWithArguments(1, 2, 3)
def my_function():
    print "Inner function"
将有一个输出

内包装 内包装 装饰参数:1 2 3 内部功能 在f*args之后 因此,f、n和x的适当值为:

f:功能 n:传递函数时返回函数的函数 x:n被传递f的结果所接受的任何东西
现在还不清楚你想在这里做什么。您能提供一些预期输入和输出的示例吗?代码的哪一部分不清楚?你有没有关于它是如何使用的,以及产出的例子?如果没有更多的上下文,这个问题对于堆栈溢出来说实在太宽泛了。似乎Church数字与Church编码有关: