为什么显示列表后调用下一个函数会出现StopIteretion错误?

问题描述 投票:0回答:1
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

python python-3.x list function generator
1个回答
0
投票

因为您已经用尽了生成器对象,并且没有任何东西可以产生给您的程序。

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)。由于没有东西可抓,所以这将导致列表为空。

© www.soinside.com 2019 - 2024. All rights reserved.