创建函数:(f, n) which return f(f(f( .... x... ))) n 次

Creating function: (f, n) which return f(f(f( .... x... ))) n times

我在 python 中创建高阶函数时遇到问题,该函数将函数 f 应用 n 次以生成新函数 h 作为其 return 值。

def compile(f, n)
    # h is a function, f applied n times
    ...
    return h

new = compile(lambda x: 2*x, 3)
new(4) == 32 # new(4) == 2(2(2(4)))

由于 Python 的函数是 first-class 公民,函数本身可以定义一个新函数并 return 它。可以使用 def 在函数内部定义一个函数,就像在您的顶级范围内一样。

作为旁注,我建议您不要使用 compile 作为函数名称,因为它不能准确反映您正在尝试做的事情,这称为 函数组合, 以及覆盖内置函数 compile.

def compose_with_self(f, n):
    def composed(arg):
        for _ in range(n):
            arg = f(arg)
        return arg
    return composed

示例:

def add_one(x):
    return x + 1

add_three = compose_with_self(add_one, 3)

print(add_three(1)) # 4

您可以使用递归轻松做到这一点

  • 如果 n 为零,只需 return x
  • 否则,n至少为1,将f(x)应用于递归结果compile (f, n - 1)

我们可以很容易地在 Python 中对其进行编码

def compile (f, n):
  return lambda x: \
    x if n is 0 else compile (f, n - 1) (f (x))

double_thrice = compile (lambda x: 2 * x, 3)

print (double_thrice (4))
# 32