迭代器的優點
迭代器訪問與for迴圈訪問非常相似,但是也有不同之處。對於支援隨機訪問的資料結構如元組和列表,迭代器並無優勢。因為迭代器在訪問的時候會丟失資料索引值,但是如果遇到無法隨機訪問的資料結構如集合時,迭代器是唯一訪問元素的方式;
迭代器僅僅在訪問到某個元素時才使用該元素。在這之前,元素可以不存在,所以迭代器很適用於迭代一些無法預先知道元素總數的巨大的集合;
迭代器提供了乙個統一的訪問集合的介面,定義iter()方法物件,就可以使用迭代器訪問。
理解迭代器
可直接作用於for迴圈的資料型別如list、tuple、dict等統稱為可迭代物件:iterable。使用isinstance()可以判斷乙個物件是否是可迭代物件。例如:
from collections import iterable
result = isinstance(,iterable)
print(result)
result = isinstance((),iterable)
print(result)
result = isinstance('python',iterable)
print(result)
result = isinstance(213,iterable)
print(result)
結果為:
true
true
true
false
可以被next()函式呼叫並不斷返回下乙個值的物件稱為迭代器:iterator。next()函式訪問每乙個物件,直到物件訪問完畢,返回乙個stopiteration異常。使用isinstance()可以判斷乙個物件是否是iterator物件。例如:
from collections import iterator
result = isinstance(,iterator)
print(result)
result = isinstance((),iterator)
print(result)
result = isinstance((x for x in range(10)),iterator)
print(result)
結果為:
false
false
true
所有的iterable都可以通過iter()函式轉化為iterator。
定義迭代器
當自己定義迭代器時,需要定義乙個類。類裡面包含乙個iter()函式,這個函式能夠返回乙個帶next()方法的物件。例如:
class myiterable:
def __iter__(self):
return myiterator()
class myiterator:
def __init__(self):
self.num = 0
def __next__(self):
self.num += 1
if self.num >= 10:
raise stopiteration
return self.num
複製迭代器
迭代器當一次迭代完畢後就結束了,在此呼叫便會引發stopiteration異常。如果想要將迭代器儲存起來,可以使用複製的方法:copy.deepcopy():x = copy.deepcopy(y),不可使用賦值的方法,這樣是不起作用的。
python 迭代器 筆記
1.凡事可用於for迴圈的物件都是iterable型別物件 2.凡事可做用於next 函式的物件都是iterator型別物件,他們表示乙個惰性計算的序列 3.集合資料型別list dicr str等是iterable物件不是iterator物件,但是可以通過呼叫iter 函式獲得乙個iterator...
Python筆記 迭代器
我們已經知道,可以直接作用於for迴圈的資料型別有以下幾種 一類是集合資料型別,如list tuple dict set str等 一類是generator,包括生成器和帶yield的generator function。這些可以直接作用於for迴圈的物件統稱為可迭代物件 iterable。1 可以...
python筆記 迭代器
能被next 函式呼叫,並不斷返回下乙個值的物件稱為迭代器 iterator 迭代器物件 迭代器是訪問集合元素的一種方式,是python中最具特色的功能之一。迭代器可以記住訪問遍歷的位置,從集合的第乙個元素開始訪問,直到集合中的所有元素被訪問完畢。迭代器只能從前往後乙個乙個的遍歷,不能後退。迭代器的...