一、迭代器
1、迭代器iterator中只能包含可迭代物件。可用於for迴圈的物件是可迭代物件iterable,如list,tuple等,可迭代物件不能用__next__()訪問元素
2、能用於for迴圈,且能通過__next__()訪問的物件是迭代器iterator,如生成器就是乙個迭代器物件
3、只能通過__next__()依次獲取迭代器中的元素,不能通過下標才查詢
4、讀取量很大的資料時,用迭代器可節省記憶體
>>> a=iter([1,2,3,4])>>> b=iter((5,6,7,8))
>>> a.__next__()1
>>> a.__next__()2
>>> b.__next__()5
>>> b.__next__
()6
4、判斷乙個物件是否為可迭代物件 和 迭代器物件
>>> from collections importiterable
>>> from collections import
iterator
>>> list1 = [1,2,3,4] #
list1是乙個可迭代物件
>>> a = iter(list1) #
將list轉化為迭代器物件
>>>isinstance(list1,iterable)
true
>>>isinstance(list1,iterator)
false
>>>isinstance(a,iterator)
true
>>> isinstance(a,iterable) #
迭代器物件一定是可迭代物件
true
>>> b = list(a) #
將迭代器物件轉化為list
>>>b
[1, 2, 3, 4]
二、生成器
1、返回迭代器的函式是乙個生成器generator。生成器可用於for迴圈,也可用__next__()取值
#函式func(n)是乙個生成器,返回包含斐波拉契數列的乙個迭代器。
deffunc(n):
a, b = 0, 1
for i in
range(n):
yield
b a, b = b, a+b
#func()是乙個生成器,可用於for迴圈
for i in func(3):
print(i)
2、另一種建立生成器的方法
>>> a = [x**2 for x in range(3)]>>>a
[0, 1, 4]
>>>type(a)
'list
'>
>>> b = (x**2 for x in range(3)) #
b是乙個生成器
>>>b
at 0x0221cb70>
>>> for i in
b:...
(i)...01
4>>>
Python迭代器和生成器
先說迭代器,對於string list dict tuple等這類容器物件,使用for迴圈遍歷是很方便的。在後台for語句對容器物件呼叫iter 函式,iter 是python的內建函式。iter 會返回乙個定義了next 方法的迭代器物件,它在容器中逐個訪問容器內元素,next 也是python的...
Python迭代器和生成器
迭代器是訪問集合元素的一種方法 是可以記住遍歷的位置的物件。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問 他有兩個基本的方法,iter 和next 字串,列表或遠足物件都可以用於建立迭代器 list1 1,2,3,4 it1 iter list1 建立迭代器物件 print next ...
python 迭代器和生成器
迭代器是訪問集合元素的一種方式。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退,不過這也沒什麼,因為人們很少在迭代途中往後退。另外,迭代器的一大優點是不要求事先準備好整個迭代過程中所有的元素。迭代器僅僅在迭代到某個元素時才計算該元素,而在這之前或之後,元素可...