從零開始學(xué)python | Python迭代器:什么是Python中的迭代器,以及如何使用它?

      網(wǎng)友投稿 684 2025-04-01

      Python編程語言已經(jīng)擴展了創(chuàng)新的方方面面,包括機器學(xué)習(xí),數(shù)據(jù)科學(xué),人工智能等。實現(xiàn)這一壯舉的眾多原因之一是Python迭代器之類的概念,而這些概念正是Python取得編程成功的基石。語。在本文中,我們將通過以下概念來理解Python迭代器:

      Iterator vs Iterable

      What Are Python Iterators?

      Custom Iterators

      Infinite Iterators

      StopIteration

      Python Iterator Examples

      迭代器與可迭代

      Python中可以用作Iterable對象的對象稱為Iterable。這基本上意味著可以迭代對象中的序列。大多數(shù)Python集合(例如list,dictionary,tuple,sets,甚至range)都可以視為Iterable。

      什么是Python迭代器?

      Python I加速器是一個包含可數(shù)數(shù)量的值的容器。可以使用迭代器遍歷容器中的值,尤其是列表。

      除了遍歷之外,迭代器還提供對容器中數(shù)據(jù)元素的訪問,但它本身并不執(zhí)行?迭代,即,在使用該概念或瑣碎使用術(shù)語時,沒有一定程度的自由。Iterator的?行為幾乎類似于數(shù)據(jù)庫游標(biāo)。這是Python中Iterator的簡單示例。

      my_obj = {"Edureka", "Python", "iterator"} iter_obj = iter(my_obj) print(next(iter_obj))

      輸出:?Edureka

      迭代器是可以與“ for循環(huán)”一起使用的任何類型的Python。任何用作迭代器的對象都必須實現(xiàn)以下方法。

      1. __iter __()

      在初始化Iterator時調(diào)用它。它應(yīng)該返回一個具有next或__next__方法的對象。

      從零開始學(xué)python | Python迭代器:什么是Python中的迭代器,以及如何使用它?

      2. __next __()

      Iterator的next方法返回Iterable的下一個值。

      當(dāng)Iterator與“ for in”循環(huán)一起使用時,在Iterator對象上,for循環(huán)隱式調(diào)用next()。此方法應(yīng)使用StopIteration來指示迭代結(jié)束。這兩種方法一起被稱為迭代器協(xié)議。讓我們嘗試通過一個示例來了解for循環(huán)如何在Python中充當(dāng)?shù)鳌?/p>

      for i in object: print(i)

      讓我們了解for循環(huán)如何作為迭代器。

      # create an iterator object from that iterable iter_obj = iter(iterable) # infinite loop while True: try: # get the next item element = next(iter_obj) # do something with element except StopIteration: # if StopIteration is raised, break from loop break

      現(xiàn)在我們知道了,for循環(huán)如何作為迭代器工作。讓我們了解如何在Python中實現(xiàn)自定義迭代器。

      自定義迭代器

      現(xiàn)在讓我們看一下如何在Python中實現(xiàn)自定義迭代器。為了理解這一點,我們將使用一個示例。在此示例中,我們將實現(xiàn)__iter __()和__next __()方法。

      class MyNumbers: def __iter__(self): self.a = 1 return self def __next__(self): x = self.a self.a += 1 return x myclass = MyNumbers() myiter = iter(myclass) print(next(myiter)) print(next(myiter)) print(next(myiter))

      輸出:?1

      2

      3

      現(xiàn)在我們知道了如何實現(xiàn)自定義迭代器,讓我們看一下Python中的無限迭代器。

      無限迭代器

      Iterator對象中的項目不一定要用盡。可以有無限個迭代器(永無休止)。這是一個演示無限迭代器的基本示例。

      內(nèi)置?函數(shù)?iter()可以使用兩個參數(shù)來調(diào)用,其中第一個參數(shù)必須是可以調(diào)用的對象(函數(shù)),第二個必須是哨兵。迭代器將調(diào)用此函數(shù),直到返回的值等于前哨值為止。

      讓我們以一個例子來理解這一點

      class MyNumbers: def __iter__(self): self.a = 1 return self def __next__(self): x = self.a self.a += 1 return x myclass = MyNumbers() myiter = iter(myclass) print(next(myiter)) print(next(myiter)) print(next(myiter)) print(next(myiter)) print(next(myiter))

      輸出:?1

      2

      3

      4

      5

      在上面的示例中,只要我們繼續(xù)添加print語句,執(zhí)行就會繼續(xù)。要停止無限迭代器,我們需要使用stopIteration語句。

      StopIteration

      為了永遠(yuǎn)停止迭代,我們使用StopIteration語句。讓我們通過一些示例來理解這一點。

      class MyNumbers: def __iter__(self): self.a = 1 return self def __next__(self): if self.a <= 5: x = self.a self.a += 1 return x else: raise StopIteration myclass = MyNumbers() myiter = iter(myclass) for x in myiter: print(x)

      輸出:?1

      2

      3

      4

      5

      現(xiàn)在,如果if語句條件為false,則執(zhí)行將移至else塊,并且迭代將停止。現(xiàn)在,讓我們看一下Python中的其他迭代器示例。

      Python迭代器示例

      這是Python中迭代器的更多示例。

      my_obj = ["Edureka", "python", "iterator"] iter_obj = iter(my_obj) print(next(iter_obj))

      輸出:?Edureka

      在此示例中,我們將元組用作可迭代對象。

      my_obj = ("Edureka", "python", "iterator") iter_obj = iter(my_obj) print(next(iter_obj))

      輸出:?Edureka

      我們甚至可以將字符串用作python中的可迭代對象。

      my_obj = "Edureka" iter_obj = iter(my_obj) print(next(iter_obj))

      輸出:?E

      這使我們到了本文的結(jié)尾,在這里我們學(xué)習(xí)了如何將Python迭代器與示例一起使用。我希望您對本教程中與您共享的所有內(nèi)容一清二楚。

      Python 容器

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:如何在電腦上建立云文檔
      下一篇:如何根據(jù)Excel中另一個單元格中的值鎖定或解鎖單元格?
      相關(guān)文章
      亚洲一级Av无码毛片久久精品| 亚洲毛片在线观看| 亚洲国产成人久久综合野外| 亚洲手机中文字幕| 国产V亚洲V天堂无码| 亚洲日韩涩涩成人午夜私人影院| 性色av极品无码专区亚洲| 亚洲中文字幕无码爆乳| 亚洲中文字幕无码爆乳app| 亚洲熟妇AV一区二区三区浪潮| 亚洲 欧洲 视频 伦小说| 亚洲AV成人一区二区三区在线看| 亚洲国产美女精品久久久久| 亚洲精品国产成人| 亚洲一级片在线观看| 亚洲av产在线精品亚洲第一站| 亚洲国产模特在线播放| 亚洲伦理一二三四| 99久久国产亚洲综合精品| 最新亚洲春色Av无码专区| 亚洲精品日韩一区二区小说| 久久亚洲AV成人无码国产最大| 国产精品亚洲AV三区| 亚洲国产小视频精品久久久三级 | 亚洲依依成人精品| 亚洲日韩国产精品乱-久| 亚洲熟女乱色一区二区三区| 色欲色欲天天天www亚洲伊| 国产亚洲综合精品一区二区三区| 最新亚洲人成网站在线观看| 亚洲国产日韩成人综合天堂| 在线观看亚洲天天一三视| 亚洲国产精品无码久久久不卡| 久久国产亚洲电影天堂| 亚洲电影唐人社一区二区| 亚洲a级在线观看| 亚洲av永久无码天堂网| 亚洲精品无码日韩国产不卡?V| 亚洲日韩精品一区二区三区无码| 亚洲av无码一区二区三区网站| 亚洲精品欧洲精品|