0

我有一个从这样的函数中调用的函数:

def counter(number):
  number = number + 1
  return number

def iterator(iteration, function):
  for i in range(iteration):
    mfunction = function
    output = mfunction()
  return output

我想这样称呼它:

number = 0
number = iterator(5, partial(counter, number))
print number

这将返回 1,而它应该返回 5,因为 count 函数应该被调用了 5 次。
我意识到不知何故数据输出不正确,但我不知道如何从 for 循环中返回。

这个问题似乎是多余的,因为我可以轻松地做类似的事情:

for i in range(5):
  number = counter(number)

但是后一个例子违背了这个程序的目的。

我认为问题在于我需要在 counter 函数中创建一个参数来解释迭代器函数。但我实际程序中的问题是我必须修改许多函数才能做到这一点,我试图避免这种情况。

我对函数内部的调用函数不太熟悉,任何帮助将不胜感激,

4

1 回答 1

2

partial(counter, number)相当于partial(counter, 0)。所以代码调用了counter(0)5次。

def counter(number):
    number = number + 1
    return number

def iterator(iteration, function, arg):
    for i in range(iteration):
        arg = function(arg)
    return arg

number = 0
number = iterator(5, counter, number)
print number # => 5

def counter(number, delta):
    number = number + delta
    return number

def iterator(iteration, function, *args):
    args = list(args)
    for i in range(iteration):
        ret = function(*args)
        args[0] = ret
    return ret

number = 0
number = iterator(5, counter, number, 5)
print number # => 25
于 2013-11-10T04:58:06.390 回答