发电机保持返回相同的值(generator keeps returning the same val

2019-07-30 05:18发布

我被困在这一块的代码,因为我不能让发电机每次都返回了我的下一个值其所谓的 - 它只是停留在第一个! 看一看:

从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)

难道你们帮助我的代码,以及解释为什么会这样? 先感谢您!

Answer 1:

每次调用ArrayCoords(20,20)它返回一个新生成的对象,不同的对象发电机返回调用每个其他时间ArrayCoords(20,20) 为了得到你想要的行为,您需要保存发电机:

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


Answer 2:

您创建的每行一个新的发电机。 试试这个:

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


文章来源: generator keeps returning the same value