當前位置:
首頁 > 最新 > Python內置數據結構之迭代器知多少?

Python內置數據結構之迭代器知多少?

迭代器

迭代器

今天給大家說說迭代器是什麼東東。

什麼是迭代器

先說一些概念性的東西:

可迭代對象:列表、元組、集合、字元串、bytes、bytearray、字典和生成器。

有的對象叫可迭代對象;有方法的可迭代對象叫迭代器。

可迭代對象可以用在語句中;可以使用成員運算符(,)。

函數把一個可迭代對象封裝成迭代器。

我們驗證一下上面所說的概念是否正確?那我們就以列表為例:

# 驗證列表是否有__iter__屬性

In[1]:lst=[1,2,3]

In[2]:lst.__iter__

Out[2]:

# 驗證列表是否有__next__屬性

In[4]:lst.__next__

---------------------------------------------------------------------------

AttributeErrorTraceback(mostrecentcalllast)

in()

---->1lst.__next__AttributeError: list objecthasnoattribute __next__

我們使用函數把列錶轉換成迭代器:

In[5]:iter01=iter(lst)

In[6]:iter01.__next__

Out[6]:

In[7]:iter01.__next__()

Out[7]:1

In[8]:iter01.__next__()

Out[8]:2

In[9]:iter01.__next__()

Out[9]:3

In[10]:iter01.__next__()

---------------------------------------------------------------------------

StopIterationTraceback(mostrecentcalllast)

in()

---->1iter01.__next__()

StopIteration:

迭代器是一種封裝。迭代器並非惰性求值,那迭代器有何用途呢?

對於上面的例子,我們完全可以使用遍歷列表也可以實現,但是使用列表遍歷會佔用更多的內存。

可迭代對象

迭代器

以菲波那切數列為例,以類的方式實現:

fromitertoolsimportisliceIn[74]:classFib:...:def__init__(self):...:self.prev=...:self.curr=1...:def__iter__(self):...:returnself...:def__next__(self):...:value=self.curr...:self.curr+=self.prev...:self.prev=value...:returnvalue...:In[75]:f=Fib()

In[76]:list(islice(f,,10))

Out[76]:[1,1,2,3,5,8,13,21,34,55]

迭代器小結

函數把可迭代對象轉化為迭代器,函數從迭代器取出下一個元素。迭代器會保存一個指針,指向可迭代對象的當前元素。調用函數的時候,會返回當前元素,並且把指針指向下一個元素。當沒有下一個元素的時候,會拋出異常。循環對於可迭代對象:首先調用方法轉化為迭代器,然後不斷的調用方法,直到拋出異常。

今天的內容比較簡單,從後面開始我們就要進行函數的學習了。請大家做好準備哦。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python 的精彩文章:

Day 5 Python數據運用的初級水準,你達到了嗎?
學Python語言到底好不好?
Python還能用來做這個?只要你想,就有這種操作!
退伍兵想年薪十萬,學Python,是首選
編程老司機的筆記,帶你系統學Python

TAG:Python |