Rud*_*koŭ 4 python iterator python-3.x
我正在阅读M.Lutz的学习Python,发现奇怪的代码块:
>>> M = map(abs, (-1, 0, 1))
>>> I1 = iter(M); I2 = iter(M)
>>> print(next(I1), next(I1), next(I1))
1 0 1
>>> next(I2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
Run Code Online (Sandbox Code Playgroud)
为什么当我调用next(I2)它时,迭代已经结束?我没有创建两个单独的实例I1和I2.为什么它的行为类似于static对象的实例?
这与"静态"对象无关,而Python中不存在这些对象.
iter(M)不创建M的副本.I1和I2都是包装同一对象的迭代器; 实际上,因为M它已经是一个迭代器,所以调用iter它只返回底层对象:
>>> iter(M)
<map object at 0x1012272b0>
>>> M
<map object at 0x1012272b0>
>>> M is iter(M)
True
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
47 次 |
| 最近记录: |