标准方法是:
it = iter(sequence)
for value in it:
print value
不需要调用iter
这里,它在循环中隐式完成:
for value in sequence:
print value
最终,iter(obj)
回报obj.__iter__()
。当你开始一个 for 循环时,它会被隐式调用:
for elem in x:
隐含地
for elem in iter(x):
然后,在循环中,python 调用next
返回的可迭代对象iter(obj)
以获取各种elem
s 直到next
引发 a Stopiteration
。
所以你的循环可以写成:
while True:
print record
try:
record = next(db)
except StopIteration:
break
或者更简洁和惯用(只要iter(db)
返回db
非常典型):
for record in db:
print record
通常,您可以使用该函数从可迭代对象中获取下一个值next
——但该对象需要有一个next
方法(或__next__
在 python3.x 上)。如果它是一个序列,在这种情况下您可能需要先调用iter
该对象:
>>> obj = ['header','header2','record1']
>>> next(obj)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: list object is not an iterator
>>> iobj = iter(obj)
>>> next(iobj)
'header'
>>> next(iobj)
'header2'
>>> for x in iobj:
... print x
...
record1
请注意,您可以通过提供要返回的第二个参数而不是 raise来抑制 aStopIteration
被引发:next
StopIteration
>>> next(iter([]))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>> next(iter([]),"Hello!")
'Hello!'
看到这个,我们发现你也可以写你的循环:
while record:
print record
record = next(db,False)
但是for
对于大多数对象来说,循环绝对是最干净的方法。