擅长:python、mysql、java
<p>除了使用<code>iter</code>为实现<code>__iter__</code>方法的对象显式获取迭代器之外,<code>iter</code>还有一种鲜为人知的双参数形式,它使迭代器重复调用函数,直到返回给定的sentinel值。在</p>
<pre><code> for line in iter(f.readline, 'EOF'):
print line
</code></pre>
<p>前面的代码将调用<code>f.read</code>(例如,一个打开的文件句柄<code>f</code>),直到它读取由字符串<code>EOF</code>组成的行。这和写作差不多</p>
^{pr2}$
<p>此外,迭代器可能是一个不同于它所迭代的对象的对象。这对于<code>list</code>类型是正确的。这意味着您可以创建两个迭代器,两个迭代器都独立地在同一个对象上迭代<em>。在</p>
<pre><code>itr1 = iter(mylist)
itr2 = iter(mylist)
x = next(itr1) # First item of mylist
y = next(itr1) # Second item of my list
z = next(itr2) # First item of mylist, not the third
</code></pre>
<p>但是,文件句柄充当它们自己的迭代器:</p>
<pre><code>>>> f = open('.bashrc')
>>> id(f)
4454569712
>>> id(iter(f))
4454569712
</code></pre>
<p>通常,<code>iter</code>返回的对象依赖于对象类型实现的<code>__iter__</code>方法。在</p>