生成器保持返回相同的值

时间:2012-07-01 04:44:49

标签: generator yield next

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

  

来自numpy import *

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)

你们可以帮我解决一下代码并解释原因吗? 提前谢谢!

2 个答案:

答案 0 :(得分:1)

您在每一行上创建一个新生成器。试试这个:

iterator = ArrayCoords(20, 20)
next(iterator)
next(iterator)

答案 1 :(得分:1)

每次调用ArrayCoords(20,20)时,它都会返回一个新的生成器对象,与您每次调用ArrayCoords(20,20)时返回的生成器对象不同。要获得所需的行为,您需要保存生成器:

>>> coords = ArrayCoords(20,20)
>>> next(coords)
(0, 0)
>>> next(coords)
(0, 1)
>>> next(coords)
(0, 2)