擅长:python、mysql、java
<blockquote>
<p>Is there a way to get the hint for zips and generators as well? Or is it something fundamental only to iterators?</p>
</blockquote>
<p>在生成器的例子中,我不认为有一个简单或自动的方法来实现它,因为如果你给我一个任意的生成器,我不知道它是怎么做的,我怎么能确定它是有限的还是不是有限的??我需要看一下代码,如果使用其他函数,我需要看看这些函数,以及它们是如何被调用的。。。它很快就会变得一团糟,所以对于一种自动的方式,所需的努力看起来比回报要大得多</p>
<p>在<code>zip</code>的情况下,我不知道它为什么没有它,看起来很容易检查每个元素的每个提示并返回其中的最小值,也许他们没有添加它,因为你可以给它生成器,而且没有理由从它们那里得到提示?在</p>
<p>所以在迭代器中可能更好,因为它们是用<a href="https://docs.python.org/3/library/stdtypes.html#iterator-types" rel="nofollow">iterator protocol</a>生成的</p>
<pre><code>class MyIterator:
def __iter__(self):
return self
def __next__(self):
...
if condition_for_more_values:
...
return next_value
else:
raise StopIteration
</code></pre>
<p>因此,在这里添加<code>__length_hint__</code>函数的逻辑是比较容易的,这就是为什么内置容器(list、tuple、str、set等)有这样的特性,因为它们是这样做的</p>
^{pr2}$
<p>由于<code>Conatiner_Iterator</code>可以访问它知道的容器的所有相关信息,因此它可以给出有意义的提示,并且可以简单到</p>
<pre><code> def __length_hint__(self):
return len(self.data) - self.i
</code></pre>