我被困在这一段代码上,因为我不能让生成器每次调用时都返回一个下一个值 - 它只停留在第一个!看看:
来自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)
你们可以帮我解决一下代码并解释原因吗? 提前谢谢!
答案 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)