最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python函數進階之迭代器的原理與使用詳解

 更新時間:2022年04月21日 15:06:47   作者:小小垂髫  
能被?next?指針調用,并不斷返回下一個值的對象,叫做迭代器。表示為Iterator,迭代器是一個對象類型數據。本文將詳細為大家講講迭代器的原理及使用,感興趣的可以學習一下

什么是迭代器

能被 next 指針調用,并不斷返回下一個值的對象,叫做迭代器。表示為Iterator,迭代器是一個對象類型數據。

概念

迭代器指的是迭代取值的工具,迭代是一個重復的過程,每次重復都是基于上一次的結果而繼續(xù)的,單純的重復并不是迭代。

特征

迭代器并不依賴索引,而通過 next 指針迭代所有數據,一次只取一個值,大大節(jié)省空間。

惰性序列

惰性序列是指沒有一次性的把所有數據都放在序列中,而是遍歷一個放一個這樣的序列,range對象和迭代器能夠產生惰性序列。

檢查可迭代對象

for循環(huán)的用于遍歷可迭代對象,簡單粗暴的來說,可以被for循環(huán)遍歷的元素都是可迭代對象。for 循環(huán)能夠遍歷一切可迭代性數據的原因在于,底層調用了迭代器,通過next方法中的指針實現數據的獲取。所以普通的非迭代器可迭代對象和迭代器之間的區(qū)別就是,一個不能直接使用next調用,一個可以被next指針調用。

再次重復一遍,可迭代對象不一定是迭代器,迭代器一定是一個可迭代對象。

使用dir()函數可以查看一個數據中的所有的對象成員,如果包含有__iter__方法,說明就是一個可迭代對象。換句話說,__iter__方法的作用就是返回一個可迭代對象。

# 定義一個列表,列表是可迭代對象
lst = [1, 2, 3, 4, 5]

# 獲取列表的所有成員
res_lst = dir(lst)

print(res_lst)
'''
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
'''

# 查看是否存在__iter__方法
res = '__iter__' in res_lst

print(res)  # True

# 存在__iter__方法,說明確實是一個可迭代對象

定義迭代器

迭代器的表示方式是iterator

使用iter函數

使用 iter 函數將一個普通的可迭代對象轉成迭代器。

lst = [1, 2, 3]
print(type(lst))    # <class 'list'>
it = iter(lst)
print(type(it))     # <class 'list_iterator'>

使用__iter__方法

使用 __iter__ 內置方法實現可迭代對象轉成迭代器。

lst = [1, 2, 3]
print(type(lst))    # <class 'list'>
it = lst.__iter__()
print(type(it))     # <class 'list_iterator'>

判斷迭代器

檢查內置方法

存在__iter__方法說明是可迭代對象。存在 __next__ 方法說明是迭代器,因為迭代器可以使用next指針獲取元素。

迭代器中,__iter____next__都存在。

產卡是可迭代對象。

# 列表
lst = list()

# 迭代器
lst_it = iter(lst)

# 迭代器中的所有成員
res_lst = dir(lst_it)

# 判斷
if '__iter__' in res_lst:
	print('lst_it是一個可迭代對象')

if '__next__' in res_lst:
	print('lst_it是一個迭代器')

'''
結果:
lst_it是一個可迭代對象
lst_it是一個迭代器
'''

使用collections模塊

導入collections模塊中的IteratorIterable類型可以判斷是否是可迭代對象或者是迭代器。Iterator是迭代器類型數據。Iterable是可迭代對象類型數據。利用導入的數據類型配合isinstance函數就可以判斷數據的類型。

lst = list()

lst_it = iter(lst)

# 判斷是否是迭代器
res = isinstance(lst_it, Iterator)
print(res)  # True

# 判斷是否是可迭代對象
res = isinstance(lst_it, Iterable)
print(res)  # True

調用迭代器

調用迭代器的幾種方法

  • 使用next函數或者是__next__內置方法一個一個、一遍一遍的獲取其中的數據;
  • 使用for循環(huán)遍歷出來;
  • 使用while循環(huán)配合next函數或者是__next__內置方法;
  • 強轉成為其它的數據類型;

使用next方法和函數

調用迭代器使用next函數才可以取出其中的內容,next 在調用迭代器中的數據時單向不可逆的,是一條路走到黑的過程,如果調用超出迭代器中的元素個數,會報錯StopIteration ,意為停止迭代。

# 因為lst本沒有數據,所以無法取出數據
lst = list()
lst_it = iter(lst)
res = next(lst_it)  # StopIteration
print(res)

取出迭代器中的數據,如果數據全部取出要重置迭代器才能再次取出。

lst = [1, 2, 3]

lst_it = iter(lst)

# 迭代器中一次只會取出一個數據
print(next(lst_it))  # 1
print(next(lst_it))  # 2
print(next(lst_it))  # 3

# 超出迭代器中的元素個數,就會報錯
print(next(lst_it))  # StopIteration

# 如果要重新取出數據,就重置迭代器,重新定義一邊迭代器就是重置迭代器
lst_it = iter(lst)

# 再次取出數據,使用__next__方法
print(lst_it.__iter__())  # 1
print(lst_it.__iter__())  # 2
print(lst_it.__iter__())  # 3

總結

使用next函數調用

使用for循環(huán)遍歷

強轉成為其它的數據類型(實測容器都可以轉成迭代器,但是迭代器只有轉成列表才會有內容)

next函數配合循環(huán)遍歷

到此這篇關于Python函數進階之迭代器的原理與使用詳解的文章就介紹到這了,更多相關Python迭代器內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python時間獲取及轉換知識匯總

    Python時間獲取及轉換知識匯總

    這篇文章主要介紹了Python時間獲取及轉換知識匯總的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-01-01
  • python3+PyQt5實現文檔打印功能

    python3+PyQt5實現文檔打印功能

    這篇文章主要為大家詳細介紹了python3+PyQt5實現文檔打印功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Python 解決中文寫入Excel時拋異常的問題

    Python 解決中文寫入Excel時拋異常的問題

    下面小編就為大家分享一篇Python 解決中文寫入Excel時拋異常的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • 深入淺析python 中的self和cls的區(qū)別

    深入淺析python 中的self和cls的區(qū)別

    這篇文章主要介紹了python 中的self和cls的實例代碼及區(qū)別講解,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • conda安裝tensorflow和conda常用命令小結

    conda安裝tensorflow和conda常用命令小結

    這篇文章主要介紹了conda安裝tensorflow和conda常用命令小結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • Python利用多線程優(yōu)化for循環(huán)的技巧分享

    Python利用多線程優(yōu)化for循環(huán)的技巧分享

    多線程可以讓程序同時執(zhí)行多個任務,從而提高整體運行效率,這篇文章將詳細介紹如何在Python中使用多線程來優(yōu)化for循環(huán),感興趣的可以了解下
    2025-02-02
  • Python提示[Errno 32]Broken pipe導致線程crash錯誤解決方法

    Python提示[Errno 32]Broken pipe導致線程crash錯誤解決方法

    這篇文章主要介紹了Python提示[Errno 32]Broken pipe導致線程crash錯誤解決方法,是ThreadingHTTPServer實現http服務中經常會遇到的問題,需要的朋友可以參考下
    2014-11-11
  • Python利用reportlab實現制作pdf報告

    Python利用reportlab實現制作pdf報告

    這篇文章主要為大家詳細介紹了reportlab生成流文件格式、reportlab分頁和圖片流文件寫入reportlab等內容,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2022-12-12
  • Python對口紅進行數據分析來選定情人節(jié)禮物

    Python對口紅進行數據分析來選定情人節(jié)禮物

    情人節(jié)送小仙女什么禮物?讓我們來用Python對口紅進行數據分析,那個女孩子會拒絕這樣精心挑選的禮物,感興趣的小伙伴快來看看吧
    2022-02-02
  • django框架使用方法詳解

    django框架使用方法詳解

    這篇文章主要介紹了django框架使用方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07

最新評論

五河县| 蓬溪县| 新丰县| 甘泉县| 定远县| 惠水县| 朝阳县| 垦利县| 乃东县| 抚顺市| 嘉荫县| 奉节县| 盐津县| 永吉县| 邯郸市| 额尔古纳市| 新野县| 佛冈县| 莱西市| 白沙| 平山县| 缙云县| 自治县| 高邑县| 玉屏| 灵丘县| 拉孜县| 田阳县| 安平县| 彩票| 铁岭市| 出国| 博罗县| 东乡族自治县| 临夏县| 扎鲁特旗| 临汾市| 毕节市| 泰顺县| 静乐县| 兖州市|