【发布时间】:2014-06-17 12:55:23
【问题描述】:
我被python中的高阶函数困住了。我需要编写一个重复函数repeat,在给定参数x 上应用函数fn 次。
例如,repeat(f, 3, x) 是 f(f(f(x)))。
这就是我所拥有的:
def repeat(f,n,x):
if n==0:
return f(x)
else:
return repeat(f,n-1,x)
当我尝试断言以下行时:
plus = lambda x,y: repeat(lambda z:z+1,x,y)
assert plus(2,2) == 4
它给了我一个AssertionError。我读到了How to repeat a function n times,但我需要以这种方式完成它,但我无法弄清楚......
【问题讨论】:
-
f(x)函数是否返回任何内容?除非另有说明,否则将返回None -
你想得到
f(x)最后一次申请的结果吗? -
不应该
repeat返回类似return f(repeat(f,n-1,x))的东西吗? -
作为一个更简单的例子,试试
plus(0,2),它应该是2,但你的代码给出了3。它不递归,所以应该很容易调试。 -
您可以尝试查看
plus的实际返回值,而不仅仅是asserting。尝试使用不同的输入,很容易看出问题所在。
标签: python