Python 创建函数:(f,n),它返回f(f(f(…x…))n次
我在python中创建一个高阶函数时遇到了问题,该函数应用函数f,n次以生成一个新函数h作为其返回值Python 创建函数:(f,n),它返回f(f(f(…x…))n次,python,function,recursion,function-composition,Python,Function,Recursion,Function Composition,我在python中创建一个高阶函数时遇到了问题,该函数应用函数f,n次以生成一个新函数h作为其返回值 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函数是一流的公民,因此函数本身可以定义一个新函数并返回它。在函数中定义函数可以使用
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函数是一流的公民,因此函数本身可以定义一个新函数并返回它。在函数中定义函数可以使用
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
由于Python函数是一流的公民,因此函数本身可以定义一个新函数并返回它。在函数中定义函数可以使用
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
x
- 否则,
至少为1,将n
应用于递归结果f(x)
compile(f,n-1)
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
使用递归可以很容易地做到这一点
- 如果
为零,只需返回n
x
- 否则,
至少为1,将n
应用于递归结果f(x)
compile(f,n-1)
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
请阅读与您的问题无关的内容:
compile
是一个Python内置函数,因此您可能不应该使用该名称编写自己的函数。这样做会屏蔽内置函数(如果您想使用原始的编译
),可能会导致错误。请阅读与您的问题无关的内容:编译
是Python内置函数,因此您可能不应该使用该名称编写自己的函数。这样做会屏蔽内置函数(如果您想使用原始的编译
,则可能会导致错误)。