【问题标题】:What is difference between 'container' and 'generator'?“容器”和“发电机”有什么区别?
【发布时间】:2021-11-20 23:57:12
【问题描述】:

我的理解是 容器 是包含其他对象并且可以迭代的对象。

我们也可以说tuplelistsetdict 是内置容器的示例。

请帮助我了解以下 iterable 是否是容器:

iter(lambda: random.choice(range(4)), 0)

上面的对象包含其他对象,也可以迭代,所以应该是一个容器

【问题讨论】:

  • 你可以争辩说那个东西“拥有其他对象”,但它可以说拥有的对象不是通过迭代它产生的对象。
  • 这是一个迭代器。所有生成器都是迭代器,但并非所有迭代器都是生成器。你认为迭代器持有哪些对象?
  • 这似乎是一个语义论据,但我会说容器是implements __contains__() 的任何对象,它允许你问if some_thing in some_container: 如果你同意这个定义,很多事情都可以不迭代其成员的容器。例如,考虑一个“包含”其中所有点的Circle 类。

标签: python containers generator terminology


【解决方案1】:

这归结为代码(如您的 lambda 示例中)和数据之间的差异。尽管两者都可以保存在 Python 中的容器中(因为函数和代码块是一等对象),但两种情况下的迭代定义不同:

  • 在容器中,意味着一个一个地遍历元素
  • 在生成器中,意味着提出新元素

【讨论】:

    猜你喜欢
    • 2016-01-23
    • 2019-07-30
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    • 2014-07-07
    • 1970-01-01
    相关资源
    最近更新 更多