我已经在Python工作了几个月了,我发现我经常忽略乍看之下逃避我的词汇,而不是试图获得一个想法的要点.现在,回顾过去,我仍然发现自己对于消费这个术语所指的内容感到困惑.我最初的兴趣来自迭代器的解释,它说明了迭代器的消耗价值.但是,环顾四周,这在Python词典中似乎并不常见.或者是吗?在这里挖掘主要是对Web服务的引用,以及关于如何隐藏这个或那个函数结果的一两个讨论.
我想那时,把我的无知分解为几个基点:
iter()? 我希望这有点道理.请注意,这不涉及任何特定需要; 我只是混淆了理性的合理性.
编辑:还有一件事......迭代值(当被调用时next())会留在内存中吗?
术语"使用"是一个非正式术语,指的是迭代器在Python中的工作方式."迭代器"是一个单个对象,负责创建一些元素序列.此序列可能是现有列表的元素,也可能是计算的值,如素数或π的十进制数字.
当调用者从迭代器请求"下一个"项时,迭代器提供下一个项,然后更改其自己的状态,以便在此之后生成下一个项.这通常是你所期望的.
如果我有一个生成质数增加序列的生成器,我第一次调用它时会得到2作为回报.下一次,我会得到3.如果我然后给你一个对该生成器的引用,你会调用它(因为你认为是第一次)并得到5.没有任何方法可以"重置"除了通过创建一个全新的发生器实例之外,它将再次从2开始.在那种情况下,我可以说在给你发电机之前我已经消耗了前两项.
关于2。
事实上,我们必须区分两种情况。
记住 Greg Hewgill 写道:
“迭代器”是一个单一的对象,负责创建一些元素序列。这个序列可能是现有列表的元素,也可能是计算出来的,比如素数或 ? 的十进制数字。
第一种情况:
迭代器计算它在刺激时必须产生的对象;也就是说,在调用next(). 因此,如果为对象分配了名称,则后者将继续存在;如果不是,则该对象将在一段时间内没有绑定到命名空间中的名称而存在,然后它会在内存中消失,也就是说它所占用的位迟早会被另一个对象使用。
第二种情况
是当迭代器返回属于列表、元组、字典等以前存在的对象时。在这种情况下,a 生成的每个对象next()都已经有一个带有名称的绑定。然后,如果对象在“弹出”迭代器时被分配了一个新名称,则将有两个名称绑定到该对象。如果对象没有被分配一个名称,它将继续只绑定一个名称,这足以维持对象的存活。
共同点:
每次调用迭代器产生一个对象,如果没有给他分配名称,那么操作的唯一结果就是迭代器被“消耗”了。可以这么说,即使在对象生成后没有永久后果,它也发生了一些让迭代器内部有痕迹的事情。
有人也谈到在为对象分配名称时使用迭代器,但是,我不想混淆。
笔记:
事实上,如果一个对象预先存在于一个列表中,比如说,它可能没有名字。但是列表保存了它“包含”的每个对象的引用......事实上,列表并不“包含”对象,而只是对对象的引用......嗯,这超出了我想说的范围。
.
关于 3
你不应该写 3:“当一个变量被分配给......”
变量这个词在 Python 中是一个陷阱,因为它的含义不明确。在 Python中没有变量,在其他语言中的常识中,即“内存的分隔部分,其值可以改变”。只有对象。变量这个词习惯性地用来表示一个标识符。因此,将其称为identifier或name是更好的做法。这样可以避免混淆。
.
关于 4
我认为不可能通过一次调用从迭代器中获得两次返回 next()
| 归档时间: |
|
| 查看次数: |
3002 次 |
| 最近记录: |