Python 为什么在显示列表后调用下一个函数时会出现StopIteretion错误? def百位数字(): i=0 而我

Python 为什么在显示列表后调用下一个函数时会出现StopIteretion错误? def百位数字(): i=0 而我,python,python-3.x,list,function,generator,Python,Python 3.x,List,Function,Generator,是因为你已经耗尽了你的生成器对象,没有什么东西可以让它屈服于你的程序 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)) 项目现在将是剩余值20到99。那么下次会发生什

是因为你已经耗尽了你的生成器对象,没有什么东西可以让它屈服于你的程序

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


项目现在将是剩余值20到99。那么下次会发生什么呢?它不能进入
while
循环,因此没有什么可产生的。如果您再次执行:
list(g)
,则可以看到这一点。这将导致空列表,因为没有可获取的内容。

如果使用
list
耗尽生成器对象,则
i
将不会进入循环,也不会产生任何结果。
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]
items = list(g)  # Could have done [next(g) for _ in range(20,100)]