python 迭代器详解
基本概念
迭代器是python最強大的功能之一,是訪問集合元素的一種方式
1.迭代器協議是指:對象必須提供一個next方法,執行該方法要么返回迭代中的下一項,要么就引起一個stoplteration異常,以終止迭代(只能往后走,不能往前退)
2.可迭代對象:實現了迭代器協議的對象(如何實現:對象內部定義一個__iter__()方法)
3.協議是一種約定,可迭代對象實現了迭代器協議,python的內部工具(如for循環,sum,min,max函數等)使用迭代器協議訪問對象。
當我們看到這些概念的時候是不是覺得很抽象?那么在搞清楚迭代器之前到底什么是迭代?
迭代:顧名思義就是指一個重復的過程,每一次重復都是基于上一次結果而來,迭代提供了一種通用的不依賴索引的迭代取值方式。
我們可以把它理解為一種只能從前往后進行比遍歷的過程,但是可以進行多次遍歷,例如我們的for循環。
可迭代對象:在python中一切皆對象,那么哪些是可迭代對象呢?其實很容易理解可以遍歷的對象例如:字符串,list,tuple,dic,set等都屬于。
如果我們無法判斷,就只需要記住在python中,但凡內部有__iter__方法的對象,都是可迭代對象。
可迭代對象的優點:可以直觀查看里面的對象,如直接查看列表的內容
可迭代對象缺點:1. 全部內容要加載至內存中,故占用內存;2. 可迭代對象不能迭代取值(除了索引,key外)
那么到底什么是迭代器呢?
顧名思義就是可以迭代取值的工具。從專業的角度來說:迭代器就是實現了__next__方法,返回序列的下一個元素,如果沒有元素了,
就會拋出StopIteration異常,python中的迭代器還實現了__iter__方法,因此迭代器也是可以迭代的。
所以簡單地說:在python中,內部含有__iter__方法并且含有__next__方法的對象就是迭代器。
如何判斷一個對象是不是迭代器,通過dir方法查看其是否具備iter和next方法,如下判斷str,list,tuple,dic和文件哪個是迭代器
示例代碼
print('__iter__' in dir(list), '__next__' in dir(list)) print('__iter__' in dir(str), '__next__' in dir(str)) file = open('test_scq.py') print('__iter__' in dir(file), '__next__' in dir(file))運行結果
True False
True False
True True
由結果可知,list,str屬于可迭代對象,但不是迭代器。file文件是可迭代對象,也是迭代器
迭代器優點:
1. 提供了一種通用不依賴索引的迭代取值方式;
2. 節省內存,迭代器在內存中相當于只占一個數據的空間:因為每次取值都上一條數據會在內存釋放,加載當前的此條數據。
迭代器缺點:
1. 因為有next方法,即只能往后取值,不能往前,取值不如按照索引的方式靈活,不能取指定的某一個值;
2. 無法預測迭代器的長度。
總結
以上是生活随笔為你收集整理的python 迭代器详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【物联网】物联网学习学科主要课程
- 下一篇: python androidhelper