这段代码有什么作用?什么是适当的n,f和x?
def successor(n):
return lambda f: lambda x: f(n(f)(x))
答案 0 :(得分:2)
所以这......代码非常糟糕。你不应该写它,因为你已经找到了(并且评论部分指出),很难说出发生了什么。让我们把它分解。
原始代码如下所示
def successor(n):
return lambda f: lambda x: f(n(f)(x))
函数successor
使用lambda返回anonymous function。这很难读,所以我们用命名函数替换它。
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
所以现在我们拆开了这个函数,我们可以看到successor
返回一个函数,该函数又返回另一个函数,该函数返回......那个函数。 f(n(f)(x))
行很难阅读。它是说使用参数n(f)(x)
调用函数f,这是一种表示n(f)
返回一个函数然后传递参数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
至于具体发生在哪里?我不知道。您必须询问编写代码的人。但是,我猜这是打算成为某种类型的装饰者。有一个类似的例子here
def decoratorFunctionWithArguments(arg1, arg2, arg3):
def wrap(f):
print "Inside wrap()"
def wrapped_f(*args):
print "Inside wrapped_f()"
print "Decorator arguments:", arg1, arg2, arg3
f(*args)
print "After f(*args)"
return wrapped_f
return wrap
这允许您使用传递给装饰器的参数在函数的实际装饰器中使用。这是调用以下函数
@decoratorFunctionWithArguments(1, 2, 3)
def my_function():
print "Inner function"
的输出为
Inside wrap()
Inside wrapped_f()
Decorator arguments: 1 2 3
Inner function
After f(*args)
因此,f
,n
和x
的适当值为:
f : function
n : function that returns a function when passed a function
x : anything that the result of n being passed f accepts