首先說一下 Iterable 與 iterator的區別
Iterator 迭代器
Iterable 可迭代對象
Iterable 凡是可以for循環的 都屬于 iterable 可迭代對象
python __iter__用法,Iterator 凡是可以next()的 都是iterator 迭代器
可迭代對象(iterble)并不一定是 迭代器(iterator)
迭代器(iterator)一定是可迭代對象(iterable)
fromcollectionsimportIterable,Iterator
xxx='abcdec' #字符串是可迭代對象
recruiter、print isinstance(xxx,Iterable)
print isinstance(xxx,Iterator)
it_xxx = iter(xxx) #轉換為迭代器
print isinstance(it_xxx,Iterable)
print isinstance(it_xxx,Iterator)
python \t、True
False
True
True
可以看到 字符串是可迭代對象,但并不是迭代器
python i++,迭代器一定是可迭代對象
Iter()與 __iter__ 則用于產生 iterator(迭代器)
__iter__ 迭代器協議
凡是實現__iter__協議的對象,皆是迭代器對象。(next()也得實現,不然沒法產生數據)
Iter()迭代器工廠函數
python __init__?凡是有定義有__iter__()函數,或者支持序列訪問協議,也就是定義有__getitem__()函數的對象 皆可以通過 iter()工廠函數 產生迭代器(iterable)對象
from collections import Iterable,Iterator
class A(object):
def __init__(self,num):
self.num = num
pythonmapiter,self.start_num = -1
def __iter__(self):
return self
def next(self):
self.start_num += 1
python的iter函數怎么用、if self.start_num > self.num:
raise StopIteration
return self.start_num
# iter()
b = [1,2,3]
iter python、it_b = iter(b)
print next(it_b)
print next(it_b)
# __iter__()
a = A(10)
print next(a)
print next(a)
print isinstance(it_b,Iterator)
print isinstance(a,Iterator)
#運行結果
1
2
0
1
True
True
由上可以看出來 iter()與iter()均產生迭代器。
Iter()與__iter__ 則用于產生 iterator(迭代器)
總體來說
__iter__用于自定義用戶對象(類)
iter()用于支持序列訪問協議,也就是定義有__getitem__()函數的內置對象,以及實現了__getitem__()函數的 用戶自定義對象。
iter()也可以用于 實現了 __iter__()的對象,不過既然已經實現了__Iter__(),那么本身就是一個迭代器了,沒必要在iter()一下。
迭代器(Iterator):
GOF給出的定義為:提供一種方法訪問一個容器(container)對象中各個元素,而又不需暴露該對象的內部細節。用于順序訪問集合對象的元素,不需要知道集合對象的底層表示。
迭代器是一種高層次的抽象接口,迭代器接口。一種統一的用于順序訪問集合對象中元素的標準,規范。
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态