4 回答
TA贡献1877条经验 获得超6个赞
迭代法
__iter__
__getitem__
IndexError
next
__next__
for
map
next
TA贡献1942条经验 获得超3个赞
任何可以循环的东西(例如,您可以在字符串或文件上循环)或 可以出现在for-循环右侧的任何内容: for x in iterable: ...
或 任何你可以调用的东西 iter()
它将返回一个ITERATOR: iter(obj)
或 定义 __iter__
返回一个新的ITERATOR,或者它可能有一个 __getitem__
方法,适用于索引查找。
如果状态记得它在迭代过程中所处的位置, 带着 __next__
方法: 返回迭代中的下一个值。 将状态更新为指向下一个值。 发出信号时,它是通过提高 StopIteration
这是可自我迭代的(意思是它有一个 __iter__
方法返回 self
).
这个 __next__
方法在Python 3中是拼写的。 next
在Python 2中,以及 内建函数 next()
调用传递给它的对象上的方法。
>>> s = 'cat' # s is an ITERABLE # s is a str object that is immutable # s has no state # s has a __getitem__() method >>> t = iter(s) # t is an ITERATOR # t has state (it starts by pointing at the "c" # t has a next() method and an __iter__() method>>> next(t) # the next() function returns the next value and advances the state'c'>>> next(t) # the next() function returns the next value and advances'a'>>> next(t) # the next() function returns the next value and advances't'>>> next(t) # next() raises StopIteration to signal that iteration is completeTraceback (most recent call last):... StopIteration>>> iter(t) is t # the iterator is self-iterable
TA贡献1821条经验 获得超6个赞
迭代是具有__iter__()方法。它可能会重复多次,例如list()S和tuple()S.
迭代器是迭代的对象。由__iter__()方法,则通过自己的方法返回自身。__iter__()方法,并具有next()方法(__next__()(见3.x)。
迭代是调用以下内容的过程next()RESP.__next__()直到它升起StopIteration.
例子:
>>> a = [1, 2, 3] # iterable
>>> b1 = iter(a) # iterator 1
>>> b2 = iter(a) # iterator 2, independent of b1
>>> next(b1)
1
>>> next(b1)
2
>>> next(b2) # start over, as it is the first call to b2
1
>>> next(b1)
3
>>> next(b1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>> b1 = iter(a) # new one, start over
>>> next(b1)
1
添加回答
举报