日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 迭代器详解

發布時間:2023/12/31 python 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 迭代器详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。