0

我正在尝试使用 yield 在每次迭代中生成新数字,如下所示:

def nextSquare():
    i = 1
  
    # An Infinite loop to generate squares 
    while True:
        yield i*i                
        i += 1  # Next execution resumes 
                # from this point

当我尝试:

>>> for num in nextSquare():
    if num > 100:
         break    
    print(num)

我得到了想要的输出:

1
4
9
16
25
36
49
64
81
100

但是当我尝试时: next(nextSquare())

它总是产生相同的旧结果。难道我做错了什么?我没有在 for 循环中生成新数字,而是对按需生成感兴趣。

4

1 回答 1

2

正如评论中所建议的,每次调用 nextSquare 都会生成一个新的迭代器,因此我将代码更改为:

gen = nextSquare()

和 onDemand 调用会next(gen)产生预期的结果。

于 2021-11-17T08:32:43.903 回答