區(qū)分
凡是可作用于for循環(huán)的對象都是Iterable類型励饵;
凡是可作用于next()函數(shù)的對象都是Iterator類型,它們表示一個惰性計算的序列来破;
集合數(shù)據(jù)類型如list闻坚、dict棚辽、str等是Iterable但不是Iterator,不過可以通過iter()函數(shù)獲得一個Iterator對象局劲。
for本質(zhì)
Python的for循環(huán)本質(zhì)上就是通過不斷調(diào)用next()函數(shù)實現(xiàn)的勺拣,例如:
for x in [1, 2, 3, 4, 5]:
pass
實際上完全等價于:
# 首先獲得Iterator對象:
it = iter([1, 2, 3, 4, 5])
# 循環(huán):
while True:
try:
# 獲得下一個值:
x = next(it)
except StopIteration:
# 遇到StopIteration就退出循環(huán)
break