Ren*_*der 4 python range python-3.x
如果我执行以下操作:
a = range(9)
for i in a:
print(i)
# Must be exhausted by now
for i in a:
print(i)
# It starts over!
Run Code Online (Sandbox Code Playgroud)
Python的生成器在提升StopIteration之后通常会停止循环.那么范围如何产生这种模式 - 它在每次迭代后重新开始.
正如其他人所说,range不是生成器,而是序列类型(如列表),使其iterable与a不同iterator.
之间的差异iterable,iterator以及generator细微的(至少对于有人新的Python).
iterator提供了一个__next__方法,并且可以排出,因此提高StopIteration.iterable是一个提供iterator内容的对象.每当__iter__调用它的方法时,它返回一个新的迭代器对象,因此你可以(间接地)迭代它多次.A generator是一个返回的函数iterator,其原因可能会耗尽.
另外要知道的是,for循环会自动查询iterator任何循环iterable.这就是为什么你可以写for x in iterable: pass而不是for x in iterable.__iter__(): pass或for x in iter(iterable): pass.
所有这些都在文档中,但恕我直言有点难以找到.最好的起点可能是词汇表.
| 归档时间: |
|
| 查看次数: |
100 次 |
| 最近记录: |