def hundred_numbers():
i=0
while i<100:
yield i
i=i+1
print(hundred_numbers())
g=hundred_numbers()
print(next(g))
print(next(g))
print(next(g))
print(list(h))
print(next(g))
错误:追溯(最近一次通话):文件“ main.py”,第13行,在打印(下一个(g))StopIteration
因为您已经用尽了生成器对象,并且没有任何东西可以产生给您的程序。
def hundred_numbers():
i=0
while i<100:
yield i
i=i+1
g=hundred_numbers()
[next(g) for _ in range(10)] # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[next(g) for _ in range(10)] # [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
看到图案了吗?现在让我们抓紧其余部分,即20-99
items = list(g) # Could have done [next(g) for _ in range(20,100)]
项目现在将是剩余值20到99。那么下次会发生什么?它无法进入while
循环,因此没有任何结果。如果执行此操作,则可以看到:再次list(g)
。由于没有东西可抓,所以这将导致列表为空。