python 迭代器 python迭代器

2021-10-10 23:32:39 字數 1717 閱讀 6607

迭代器

可以直接作用for迴圈的資料型別

我們已經知道,可以直接作用for迴圈的資料型別有以下幾種:

一類是集合資料型別 如:list、tuple、dict、set、str等;

一類是generator,包括生成器和帶yield的generator function;

可迭代物件定義

這些可以直接作用for迴圈的物件稱為可迭代物件:iterable。

可迭代物件判斷

可以使用isinstance()判斷乙個物件是否是iterable物件:from collections import iterable,iterator

isinstance(,iterable)

print(isinstance(,iterable))

isinstance({},iterable)

isinstance("abc",iterable)

isinstance((x for x in range(10)),iterable)

isinstance(100,iterable) #返回false

迭代器定義

print(isinstance((x for x in range(10)),iterator))

把list、dict、str轉成迭代器

生成器都是iterator物件,但list、dict、str雖然是iterable,卻不是iterator。

把list、dict、str等iterable變成iterator可以使用iter()函式:isinstance(iter(),iterator)

print(isinstance(iter(),iterator))

isinstance(iter("abc"),iterator)

print(isinstance(iter("abc"),iterator))

為什麼list、dict、str等資料型別不是iterator?

這是因為python的iterator物件表示的事乙個資料流,iterator物件可以被next()函式呼叫並不斷返回乙個序列,

但我們卻不能提前知道序列的長度,只能不斷通過next()函式實現按需計算下乙個資料,所以iterator的計算是惰性的,

只有在需要返回下乙個資料時它才會計算。

iterator甚至可以表示乙個無限大的資料流,例如全體自然數。而使用list是永遠不可能儲存全體自然數的。

小結:凡是可作用域for迴圈的物件都是iterable型別;

凡是可作用於next()函式的物件都是iterator型別,它們表示乙個惰性計算的序列;

集合資料型別如:list、dict、str等是iterable但不是iterator,不過可以通過iter()函式獲得乙個iterator物件。

python的for迴圈本質上就是通過不斷呼叫next()函式實現的,range(10)

python3.x 就是乙個迭代器

python2.x 就生成乙個列表,要成為迭代器寫成xrange(10) ;

例如:for i in [1,2,3,4,5]:

pass

就相當於下邊:

首先獲得迭代器

it = iter([1,2,3,4,5])

迴圈while true:

try:

#獲得下乙個值

x = next(it)

except stopiteration:

#遇到stopiteration

break

python的迭代器 Python 迭代器

迭代器 迭代是訪問集合元素的一種方式。迭代器是乙個可以記住遍歷的位置的物件。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。可迭代物件 以直接作用於 for 迴圈的資料型別有以下幾種 一類是集合資料型別,如 list tuple dict set str 等...

python的迭代器 python 迭代器

在介紹迭代器之前,先說明下迭代的概念 迭代 通過for迴圈遍歷物件的每乙個元素的過程。python的for語法功能非常強大,可以遍歷任何可迭代的物件。在python中,list tuple string dict set bytes都是可以迭代的資料型別。可以通過collections模組的iter...

python的迭代器 Python 迭代器

概述迭代器是訪問集合元素的一種方式。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。延遲計算或惰性求值 lazy evaluation 迭代器不要求你事先準備好整個迭代過程中所有的元素。僅僅是在迭代至某個元素時才計算該元素,而在這之前或之後,元素可以不存在或...