返回返回函数的函数的函数

时间:2018-05-25 21:10:41

标签: python

我已经获得了这个功能。它返回函数pair,它也返回函数f。这是欺骗我的部分,我不知道f(a, b)是什么以及如何使用它。

def cons(a, b):
    def pair(f):
        return f(a, b)
    return pair

4 个答案:

答案 0 :(得分:3)

为了帮助您了解正在发生的事情,请考虑以下示例:

def cons(a, b):
    def pair(f):
        return f(a, b)
    return pair

def my_func(a, b):
    return a + b

# cons returns a function that takes a function arg and calls it with args (a, b),
# in this case (1, 3). Here a, b are considered "closured" variables.
apply_func = cons(1, 3)

print apply_func(my_func) # prints 4

答案 1 :(得分:1)

  

。 。 。我不知道f(a, b)是什么以及如何使用它。

f(a, b)只是一个函数调用。您提供的所有代码都定义了一个返回函数的函数。从第一个函数返回的函数本身返回一个函数。我假设它的使用方式可能是:

>>> cons(1, 2)(lambda x, y: x + y)
3
>>>

以上代码相当于:

>>> pair_func = cons(1, 2) # return the `pair` function defined in `cons`
>>> f = lambda x, y: x + y 
>>> pair_func(f) # apply the `f` function to the arguments passed into `cons`.
3
>>>

也可能有助于注意,在这种情况下定义的pair函数是闭包所知道的。从本质上讲,闭包是一个函数,它可以在函数完成执行后 从封闭函数的作用域访问局部变量。在您的特定情况下,cons是封闭函数,pair是闭包,ab是闭包访问的变量。

答案 2 :(得分:1)

让我们从内到外分析:

def cons(a, b):
    def pair(f):
        return f(a, b)
    return pair

最深层次return f(a, b) - 显然会使用参数f调用函数(a, b)并返回其结果。

下一个级别pair

def pair(f):
    return f(a, b)

函数pair将函数作为参数,使用两个参数(a, b)调用该函数并返回结果。例如:

def plus(x, y):
    return x + y

a = 7
b = 8
pair(plus)  # returns 15

最外层cons - 它构造了具有任意ab的函数对,并返回该版本的对。 E.g。

pair_2_3 = cons(2,3)

pair_2_3(plus)  # returns 5, because it calls plus(2, 3)

答案 3 :(得分:0)

如果您可以分享完整的问题,那么我们可以帮助您更好。同时我在这里告诉你的是,在返回pair(f)时,程序调用一个函数f,它接受两个参数a和b。调用该函数f(a,b),然后将其值返回到对(f)。

但这里需要注意的是,在对函数中我们已经有一个局部变量f,所以当我们尝试调用函数f(a,b)时,它会给我们UnboundedLocalVariable错误。因此,我们需要将此函数的名称从f更改为其他内容。