Python迭代器小坑
我们知道,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。
如果文章帮助您解决了工作难题,您可以帮我点击屏幕上的任意广告,或者赞助少量费用来支持我的持续创作,谢谢~
