迭代是訪問集合元素的一種方式遇伞。
迭代器是一個(gè)可以記住遍歷的位置的對(duì)象象踊。
迭代器對(duì)象從集合的第一個(gè)元素開始訪問锉矢,直到所有的元素被訪問完結(jié)束侍郭。
迭代器只能往前不會(huì)后退询吴。
isinstance(對(duì)象,Iterable)
如果結(jié)果為True掠河,只是表示,這些對(duì)象以使用for循環(huán)迭代遍歷
isinstance(對(duì)象,Iterator)
如果結(jié)果為True,表示這個(gè)對(duì)象可以for,next
iter() :生成器都是 Iterator 對(duì)象猛计,但 list 唠摹、 dict 、 str 雖然是 Iterable 奉瘤,卻不是 Iterator 勾拉。把 list 、 dict 盗温、 str 等 Iterable 變成 Iterator 可以使用 iter() 函數(shù)
import collections
#from collections import Iterator,Iterable
ge = (x for x in range(10))
print(isinstance(ge,collections.Iterable))
print(isinstance(ge,collections.Iterator))
#for i in ge:
#print(i)
print(next(ge))
而生成器不但可以作用于 for 循環(huán)藕赞,還可以被 next() 函數(shù)不斷調(diào)用并返回下一個(gè)值,直到最后拋出 StopIteration 錯(cuò)誤表示無(wú)法繼續(xù)返回下一個(gè)值了肌访。
ls = [x for x in range(10)]
print(isinstance(ls,collections.Iterable))
print(isinstance(ls,collections.Iterator))
for i in ls:
print(i)
#next(ls)
ls = [x for x in range(1000000)]
it = iter(ls)
print(next(it))
def f(num):
ls = [x for x in range(num)]
return iter(ls)
it = f(100000)
凡是可作用于 for 循環(huán)的對(duì)象都是 Iterable 類型找默;
凡是可作用于 next() 函數(shù)的對(duì)象都是 Iterator 類型
集合數(shù)據(jù)類型如 list 、 dict 吼驶、 str 等是 Iterable 但不是 Iterator 惩激,不過(guò)可以通過(guò) iter() 函數(shù)獲得一個(gè) Iterator 對(duì)象。
目的是在使用集合的時(shí)候蟹演,減少占用的內(nèi)容风钻。