迭代器
可以直接作用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 迭代器不要求你事先準備好整個迭代過程中所有的元素。僅僅是在迭代至某個元素時才計算該元素,而在這之前或之後,元素可以不存在或...