谢谢你们。我发现我无法在互联网上发布我的问题。
然而,这对我很有帮助。
答案 0 :(得分:4)
撰写将需要3个参数:要编写的函数,编写它的次数以及初始参数。所以如果你想评估f(f(f(7)))你会调用compose(f,3,7)。
def compose(f, n, x):
if n == 0: return x
return compose(f, n-1, f(x))
我想到这可能不是你想要的。也许您希望能够编写g = compose(f, 3)
然后拨打g(7)
。这只需要稍作修改:
def compose(g, m):
def composer(f, n, x):
if n == 0: return x
return compose(f, n-1, f(x))
return lambda x: composer(g, m, x)
答案 1 :(得分:1)
我不确定我是否理解正确,但我相信你期望compose()返回一个函数。在这种情况下,这将起作用:
def compose(f, n):
def composed_f(x):
result = x
for i in range(n):
result = f(result)
return result
return composed_f
所以,如果你写:
a = compose((lambda x:x*2), 5)
print a(1)
你会得到32
答案 2 :(得分:0)
使用saulspatz的compose和lambda
cubed = lambda x: x**3
def compose(f, n, x):
if n == 0: return x
return compose(f, n-1, f(x))
print(compose(cubed,2,2))
512
答案 3 :(得分:0)
虽然这可以使用递归简洁地实现,但迭代解决方案更有效,并且不会因n
的大值而中断。
def compose(f, n):
def iterated_f(x):
rv = x
while n > 0:
rv = f(rv)
return rv
return iterated_f