1.使用len(list(iter_name))查看iterable对象长度,发现iterable对象不再可用
代码如下:
from pathlib import Path
img_path = Path("./img")
img_files = img_path.rglob("*.png")
print(len(list(img_files)))
next(img_files)
执行后,最后一句抛出StopIteration
异常
2.原因探究
使用yeld
建立了一个生成iterable对象的函数,查看转换为list时,iterable对象具体发生了什么
def yield_test(n):
for i in range(n):
yield i
print("i=", i)
print("end.")
a = yield_test(5)
list(a)
print(next(a))
输出为:
i= 0
i= 1
i= 2
i= 3
i= 4
end.
StopIteration
可以看到,将iterable对象转换为list时,iterable对象被从头迭代到尾,它已经变成“空”的,再调用就会出现StopIteration
异常
3.查看iterable对象长度的正确姿势
仍然可以转换为list对象来查看长度,但需要先将iterable对象深度拷贝一下,不影响其后续使用。
三种查看iterable对象长度的方法详见:https://blog.csdn.net/weixin_34248118/article/details/92677028