【问题标题】:Python name of iterable that can be iterated many times可迭代多次的可迭代对象的 Python 名称
【发布时间】:2011-12-12 13:43:04
【问题描述】:

我正在努力改进我的文档。我想说这个函数接受的是一个 collections.Iterable 的东西,但是代码会多次迭代这个 iterable。 “列表”过于具体,“可迭代”不起作用,因为某些可迭代对象只能迭代一次。

事物有名字吗? “可重复”?可多次迭代?

【问题讨论】:

  • 没有回答你的问题,但我建议你可以在你的代码中使用 itertools.tee - 这样它就可以接受任何可迭代的东西。
  • @jsbueno:不过,这会在传递序列时引入冗余副本。
  • @SvenMarnach:实际上,“tee”只是做“正确的事”——它只会有序列值的“多个副本”,这些序列值使用过一次,但不是一直使用。这个问题必须是一个资源非常关键的问题,这种缓存才能成为一个问题。如果是这样,如果传入了一个序列,则不使用tee 将是一个if 的问题。
  • @jsbueno: 为什么当一个序列被传递给它时,tee 不能自动做正确的事情?

标签: python


【解决方案1】:

您可能想要术语"sequence"。 Python 中的序列是具有长度并支持按索引访问项目的东西。

【讨论】:

  • 这可能也太具体了 - 例如链接列表不支持按索引访问,但仍然可以重复。
  • @SideshowBob:我认为这在实践中并没有太大限制。 Python 附带的唯一链表实现是分块链表deque,它也是一个序列。当然,对于deque,按索引访问是 O(n)。
  • @SvenMarnach:ValuesView 是“可重复的”,但一般不支持按索引访问。
【解决方案2】:

我想不出任何合适的东西。 Reiterable 听起来是个好词,为什么不在你的文档中明确定义然后使用它呢?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-26
    • 2013-08-03
    • 2019-06-03
    • 2020-01-03
    • 2019-11-18
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多