我们知道,python的迭代器是通过不断调用next()方法来前进遍历的。
但是我们很少注意,迭代器不能用2次的问题,下面展示了这个问题:
1 2 3 4 |
l = [1, 2, 3] it = iter(l) print(list(it)) print(list(it)) |
输出:
1 2 |
[1, 2, 3] [] |
因为第一次list(it)已经让迭代器前进到了末尾,所以第二次list(it)会得到一个空列表。
单独看这个问题很容易理解,但是放到开发的具体过程中是很容易出现的,一个典型场景如下:
1 2 3 4 5 6 7 8 9 |
def f(): return iter([1, 2, 3]) r = f() for i in r: print(i) for i in r: print(i) |
其输出:
1 2 3 |
1 2 3 |
这种错误很容易遇到的原因是,我们经常不在乎函数返回的是迭代器还是列表,因此我们很容易在返回迭代器的情况下搞出上述的BUG。
如果文章帮助了你,请帮我点击1次谷歌广告,或者微信赞助1元钱,感谢!

知识星球有更多干货内容,对我认可欢迎加入:
