迭代是訪問集合元素的⼀種⽅式。迭代器是⼀個可以記住遍歷的位置的物件。迭代器物件從集合的第⼀個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。
我們已經知道可以對list、tuple、str等型別的資料使⽤for…in…的迴圈語法從
其中依次拿到資料進⾏使⽤,我們把這樣的過程稱為遍歷,也叫迭代。
但是,是否所有的資料型別都可以放到for…in…的語句中,然後讓for…in…
每次從中取出⼀條資料供我們使⽤,即供我們迭代嗎?
for i in 100:
print(i)
traceback (most recent call last):
file "", line 1, in typeerror: 'int' object is not iterable
int整型不是iterable,即int整型不是可以迭代的
我們⾃定義⼀個容器mylist⽤來存放資料,可以通過add⽅法向其中新增資料
class mylist(object):
def __init__(self):
self.container =
def add(self, item):
mylist = mylist()
mylist.add(1)
mylist.add(2)
mylist.add(3)
for num in mylist:
print(num) ...
traceback (most recent call last):
file "", line 1, in typeerror: 'mylist' object is not iterable
我們⾃定義了⼀個容器型別mylist,在將⼀個存放了多個資料的mylist物件放到for…in…的語句中,發現for…in…並不能從中依次取出⼀條資料返回給我們,也就說我們隨便封裝了⼀個可以存放多條資料的型別卻並不能被迭代使⽤。我們把可以通過for…in…這類語句迭代讀取⼀條資料供我們使⽤的物件稱之為可迭代對(iterable)兩種方法:
1.可迭代物件.iter()
2.iter(可迭代物件)
可以使⽤ isinstance() 判斷⼀個物件是否是 iterable 物件:
in [50]: from collections import iterable
in [51]: isinstance(, iterable) out[51]: true
in [52]: isinstance({}, iterable)
out[52]: true
in [53]: isinstance(『abc』, iterable)
out[53]: true
in [54]: isinstance(mylist, iterable)
out[54]: false
in [55]: isinstance(100, iterable)
out[55]: false
我們分析對可迭代物件進⾏迭代使⽤的過程,發現每迭代⼀次(即在for…in… 中每迴圈⼀次)都會返回物件中的下⼀條資料,⼀直向後讀取資料直到迭代了所有資料後結束。那麼,在這個過程中就應該有⼀個「⼈」去記錄每次訪問到了第⼏條資料,以便每次迭代都可以返回下⼀條資料。我們把這個能幫助
我們進⾏資料迭代的「⼈」稱為迭代器(iterator)。
可迭代物件的本質就是可以向我們提供⼀個這樣的中間「⼈」即迭代器幫助我們對其進⾏迭代遍歷使⽤。
可迭代物件通過iter⽅法向我們提供⼀個迭代器,我們在迭代⼀個可迭代物件的時候,實際上就是先獲取該物件提供的⼀個迭代器,然後通過這個迭代器來依次讀取物件中的每⼀個資料。那麼也就是說,⼀個具備了iter⽅法的物件,就是⼀個可迭代物件。
class mylist(object):
def __init__(self):
self.container =
def add(self, item):
def __iter__(self):
"""返回⼀個迭代器"""
我們暫時忽略如何構造⼀個迭代器物件
pass
mylist = mylist()
from collections import iterable
isinstance(mylist, iterable)
這回測試發現新增了__iter__⽅法的mylist物件已經是⼀個可迭代物件了 python中可迭代物件反轉
1 字串反轉 a 839574 reversed a object at 0x00000215caca0d60 for i in reversed a reversed反轉為迭代器物件 print i,end 4 7 5 9 3 8 a 839574 a.reverse 字串不能都就地反轉 trac...
Python 可迭代物件
1.可迭代物件 以直接作用於for迴圈的資料型別有以下幾種 一類是集合資料型別 如 list tuple dict set str等 一類是generator,包括生成器和帶yield 的 generator function 這些可以直接作用於for迴圈的物件統稱為可迭代物件 iterable 2...
python可迭代物件
0 在python中只要是能用for in的,都是可迭代物件,讓我們看下定義 定義 我們已經知道可以對list tuple dict set str等型別的資料使用for in 的迴圈語法,會從其中依次拿到資料元素進行使用,我們把這樣的過程稱為遍歷,也叫迭代。所以我們把可以通過for in 這類語句...