python迭代器筆記

2021-10-04 05:58:22 字數 1722 閱讀 6143

迭代器的優點

迭代器訪問與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中最具特色的功能之一。迭代器可以記住訪問遍歷的位置,從集合的第乙個元素開始訪問,直到集合中的所有元素被訪問完畢。迭代器只能從前往後乙個乙個的遍歷,不能後退。迭代器的...