0

呼び出されるたびにジェネレーターに次の値を返すようにさせることができないため、この 1 つのコードに行き詰まっています。最初の値のままです。見てみましょう:

numpy インポートから *

def ArrayCoords(x,y,RowCount=0,ColumnCount=0):   # I am trying to get it to print
    while RowCount<x:                            # a new coordinate of a matrix
        while ColumnCount<y:                     # left to right up to down each
            yield (RowCount,ColumnCount)         # time it's called.
            ColumnCount+=1
        RowCount+=1
        ColumnCount=0

ここに私が得るものがあります:

>>> next(ArrayCoords(20,20))
... (0, 0)
>>> next(ArrayCoords(20,20))
... (0, 0)

しかし、それは最初のもので立ち往生しています!私はこれを期待していました:

>>> next(ArrayCoords(20,20))
... (0, 0)
>>> next(ArrayCoords(20,20))
... (0, 1)
>>> next(ArrayCoords(20,20))
... (0, 2)

コードを手伝ってくれて、なぜそうなのか説明してもらえますか? 前もって感謝します!

4

2 に答える 2

1

すべての行で新しいジェネレーターを作成します。代わりにこれを試してください:

iterator = ArrayCoords(20, 20)
next(iterator)
next(iterator)
于 2012-07-01T04:49:36.067 に答える
1

を呼び出すたびに、 を呼び出すArrayCoords(20,20)たびに返されるジェネレーター オブジェクトとは異なる、新しいジェネレーター オブジェクトが返されますArrayCoords(20,20)。必要な動作を得るには、ジェネレーターを保存する必要があります。

>>> coords = ArrayCoords(20,20)
>>> next(coords)
(0, 0)
>>> next(coords)
(0, 1)
>>> next(coords)
(0, 2)
于 2012-07-01T04:49:47.980 に答える