擅长:python、mysql、java
<p>当用两个参数调用时,<code>iter</code>接受一个可调用值和一个sentinel值。它的行为就好像是这样实现的:</p>
<pre><code>def iter2args(f, sentinel):
value = f()
while value != sentinel:
yield value
value = f()
</code></pre>
<p>作为<code>f</code>传入的内容必须是<em>可调用的</em>,这意味着您可以像函数一样调用它。<code>list</code>内置是一个<code>type</code>对象,通过像函数一样调用它,您可以使用它来创建新的列表实例:</p>
^{pr2}$
<p>您传入的列表<code>l</code>是一个现有的列表实例,不能像函数一样使用:</p>
<pre><code>>>> l = [1,2,3,4,5,6]
>>> l(3)
Traceback (most recent call last):
File "<pyshell#20>", line 1, in <module>
l(3)
TypeError: 'list' object is not callable
</code></pre>
<p>因此,<code>list</code>类型的对象和列表实例之间有一个很大而重要的区别,这在与<code>iter</code>一起使用时会显现出来。在</p>
<p>要遍历列表直到到达sentinel,可以使用<code>itertools.takewhile</code>:</p>
<pre><code>import itertools
for val in itertools.takewhile(l, lambda x: x!= 4):
print(val)
</code></pre>