python - PEP 424 __length_hint__() - 有没有办法对生成器或 zipper 做同样的事情?

标签 python python-3.x generator python-internals

刚刚遇到这个很棒的__length_hint__()来自 PEP 424 ( https://www.python.org/dev/peps/pep-0424/ ) 的迭代器方法。哇!一种在不耗尽迭代器的情况下获取迭代器长度的方法。

我的问题:

  • 有没有一个简单的解释这个魔法是如何工作的?我只是好奇。
  • 是否存在限制和不起作用的情况? (“提示”听起来有点可疑)。
  • 有没有办法获得 zipper 和生成器的提示?或者它只是迭代器的基础?

  • 编辑:顺便说一句,我看到 __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/

    相关文章:

    Python套接字连接异常

    python - 无法抓取所有评论

    python - Lambda 语法无效

    python - 从 Python 中的无限生成器获取子集列表

    python - 从 Python 中的 block 中停止生成器

    python - 从字典 Python 中选择最佳组

    python - 如何使用 Python 显示值构建从正百分比到负百分比的水平堆积条形图

    python-3.x - python : Printing a list with a line break after every nth item

    python - Keras假形,

    python - 从文件中读取行的生成器