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 を返しますが、count 関数は 5 回呼び出されているはずなので、5 を返すはずです。
どういうわけかデータが正しく出力されていないことに気付きましたが、for ループから戻る方法がわかりません。

次のようなことは簡単にできるので、この質問は冗長に思えるかもしれません。

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

しかし、後者の例は、このプログラムの目的に反しています。

問題は、イテレータ関数を説明するためにカウンター関数に引数を作成する必要があることだと思います。しかし、私の実際のプログラムの問題は、これを行うために多くの関数を変更する必要があることであり、それを回避しようとしています。

私は関数内で関数を呼び出すことに慣れていないので、助けていただければ幸いです。

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 に答える