在Python中“消费”是什么意思?在迭代器中?

问题描述

关于2。

实际上,我们必须区分两种情况。

记得格雷格·休吉尔(Greg Hewgill)写道:

“迭代器”是负责创建元素序列的单个对象。此序列可能是现有列表的元素,也可能是已计算的内容,例如质数或π的十进制数字。

迭代器计算刺激时必须产生的对象;也就是说,在调用之前不存在产生的对象next()。因此,如果为该对象分配了名称,则该对象将保留下来。如果不存在,则该对象将在一定时间内不绑定到名称空间中的名称而存在,然后它将在内存中消失,也就是说,它占用的位将在以后或早用于另一个对象。

是当迭代器返回属于列表,元组,字典等的先前存在的对象时。在这种情况下,由a产生的每个对象next()已经具有名称的绑定。然后,如果在对象“弹出”到迭代器时为其分配了新名称,则将有两个名称绑定到该对象。而且,如果未将对象分配给名称,则它将继续仅绑定到一个名称,这足以使对象保持活动状态。

每次通过迭代器的调用生成对象时,如果没有为其分配名称,则操作的唯一结果是迭代器已被“消耗”。用这种方式可以说,即使在生成对象之后没有永久性后果,它也会发生使迭代器内部发生跟踪的事情。

有人谈到在给对象分配名称时也消耗了迭代器,但是,我不想混淆。

实际上,如果某个对象预先存在于列表中,则可能是它没有名称。但是列表包含它“包含”的每个对象的引用…实际上,列表并不“包含”对象,而仅引用对象…远远超出了我想说的范围。

关于3

您不应该编写3: “将变量分配给…时”

变量 一词在Python中是一个陷阱,因为它含义不明确。从其他语言的常识来看,Python中没有 变量 ,也就是说, 只有对象。 这个词通常被用来表示一个 标识符 。因此,将其称为“ 标识符 ”或“名称 是一种更好的做法。这避免了混乱。

关于4

我认为仅一次调用就不可能从迭代器中获得两次收益 next()

解决方法

我已经在Python中工作了几个月,但我突然发现,我常常忽略了乍看之下能逃避我的词汇,而是试图去了解一个主旨。现在,回顾过去,我仍然发现自己对“ 消费”
一词感到困惑。我最初的兴趣来自对迭代器的解释,该解释谈到了迭代器的价值正在被消耗。但是,环顾四周,这似乎在Python词典中并不常见。还是?在这里四处浏览可以找到大多数对Web服务的引用,以及一两次关于如何隐藏函数结果的讨论。

我想然后将我的无知分解为几个基本点:

  1. “消费”是否在不同的Python上下文中做不同的事情?
  2. 数据在被使用时(例如in)会发生iter()什么变化?
  3. 将变量分配给迭代器的结果(据称是消耗的数据)时,它不再属于迭代器吗?
  4. 您可以在一次对迭代器的调用中消耗一个迭代器对象的多个值吗?

我希望这有一定道理。请注意,这并不是针对任何特殊需求。我只是在合理性之外感到困惑。

编辑:还有一件事…迭代值(用调用时next())是否保留在内存中?