我已经获得了这个功能。它返回函数pair
,它也返回函数f
。这是欺骗我的部分,我不知道f(a, b)
是什么以及如何使用它。
def cons(a, b):
def pair(f):
return f(a, b)
return pair
答案 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
是闭包,a
和b
是闭包访问的变量。
答案 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
- 它构造了具有任意a
和b
的函数对,并返回该版本的对。 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更改为其他内容。