擅长:python、mysql、java
<p>您尝试使用的iter形式只接受一个0参数函数。下面仅作说明;不要这样做。</p>
<pre><code>>>> x = 0
>>> def counter():
... global x
... x += 1
... return x
...
>>> list(iter(counter, 10))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
</code></pre>
<p>一般来说,这种形式的<code>iter</code>不是很有用。它需要某种在调用之间保持状态的可调用类型。例如,可以传递文件对象的<code>readline</code>方法,如<a href="http://docs.python.org/library/functions.html#iter" rel="nofollow noreferrer">docs</a>中所建议的。但总的来说,有更好的方法可以做到这一点。例如,假设您创建了这样一个类:</p>
<pre><code>>>> class Incrementer(object):
... def __init__(self):
... self.state = 0
... def __call__(self):
... rval = self.state
... self.state += 1
... return rval
...
>>> list(iter(Incrementer(), 10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
</code></pre>
<p>它很可爱,但是如果您必须创建一个应该是可iterable的类,那么您也可以通过给它一个<code>next</code>方法和一个<code>__iter__</code>方法使它成为一个真正的迭代器。相反,如果不创建类,只需使用<a href="https://stackoverflow.com/questions/231767/the-python-yield-keyword-explained">^{<cd5>}</a></p>