下面的代码产生一些非常奇怪的结果import re
string = "test test test"
positions = re.finditer("test", string)
print (list(positions))
print (list(positions))
输出:
^{pr2}$
现在,我想我知道这里发生了什么。第一个list调用“耗尽”迭代器(因此它“向上使用迭代器”,就像在生成器中,在从迭代器创建列表的过程中一样),所以当第二次调用list时,迭代器消失了,我们得到一个空列表。下面的段落似乎证实了这一点,尽管我试图理解他们在这里说的一些事情,所以我对这个解释并不完全满意(如果这是正确的):A container object (such as a list) produces a fresh new iterator
each time you pass it to the iter() function or use it in a for loop.
Attempting this with an iterator will just return the same exhausted
iterator object used in the previous iteration pass, making it appear
like an empty container.
我真的不明白他们在上一段的第一句话里在说什么,尤其是关于传递给iter()函数的内容,我也不知道他们是如何将for循环中的用法与生成新迭代器的列表联系起来的。不过,第二句话似乎更接近我在上面代码中最初所想的。在
如果有人能帮我理清这里的困惑,我将不胜感激。在
注意:
我使用的是python3.5.1