0

我被困在这段代码上,因为我无法让生成器在每次调用时都返回下一个值——它只是停留在第一个!看一看:

从 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 回答