刚刚遇到这个很棒的__length_hint__()
来自 PEP 424 ( https://www.python.org/dev/peps/pep-0424/ ) 的迭代器方法。哇!一种在不耗尽迭代器的情况下获取迭代器长度的方法。
我的问题:
编辑:顺便说一句,我看到
__length__hint__()
从当前位置计数到最后。即部分消耗的迭代器将报告剩余长度。有趣的。
最佳答案
Wow! A way to get the iterator length without exhausting the iterator.
号这是获得 的一种方式模糊提示关于长度可能是多少。没有要求它在任何方面都是准确的。
Is there a simple explanation how does this magic work?
迭代器实现了
__length_hint__
使用某种特定于迭代器的信息来猜测它将输出多少元素的方法。这个猜测可能相当不错,也可能非常糟糕。例如,列表迭代器知道它在列表中的位置以及列表的长度,因此它可以报告列表中还剩下多少元素。Are there limitations and cases where it wouldn't work?
如果迭代器没有足够的信息来猜测它什么时候会用完,它就无法实现有用的
__length_hint__
.例如,这就是为什么生成器没有生成器的原因。无限迭代器也无法实现有用的 __length_hint__
,因为没有办法表示无限长度。Is there a way to get the hint for zips and generators as well? Or is it something fundamental only to iterators?
zip
实例和生成器都是迭代器。都没有 zip
发电机类型也没有提供 __length_hint__
方法,不过。
关于python - PEP 424 __length_hint__() - 有没有办法对生成器或 zipper 做同样的事情?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38385360/