创建函数:(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
我在 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
为零,只需 returnx
- 否则,
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