【发布时间】:2021-11-27 08:32:18
【问题描述】:
为什么我们在这里得到 4 个对象而不是 3 个?因为我的列表中只有 3 个元素
def special_for(iterable):
iterator = iter(iterable)
while True:
try:
# print(next(iterator))
print(iterator)
next(iterator)
except(StopIteration):
break
my_arr = [1, 2, 3]
special_for(my_arr)
输出是:
<list_iterator object at 0x107a67e50>
<list_iterator object at 0x107a67e50>
<list_iterator object at 0x107a67e50>
<list_iterator object at 0x107a67e50>
【问题讨论】:
-
行
print(iterator)将在next(iterator)之前执行第四次引发StopIteration错误 -
列表包含整数并且脚本打印出相同的迭代器(参见内存中的地址 0x...)。看看当你打印出下一个迭代器的结果时会发生什么,你应该在控制台中看到整数。数组中只有三个元素,但算法在引发异常之前调用 print(iterator) 4 次,导致迭代器没有更多元素可以从可迭代对象中检索。最好使用“for e in iterator”循环语法来避免带有异常处理的构造。
-
谢谢大家@barun
标签: python for-loop generator iterable