中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中怎么創建迭代器

發布時間:2023-04-21 16:59:58 來源:億速云 閱讀:111 作者:iii 欄目:編程語言

本篇內容主要講解“Python中怎么創建迭代器”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Python中怎么創建迭代器”吧!

什么是迭代器

什么是python迭代器呢? 舉一個最簡單的例子:

list1 = ["pdudo","juejin","hello"]
tuple1 = ("pdudo","juejin","hello")
dict1 = {"name":"pdudo"}

for i in list1:
    print(i)
for i in tuple1:
    print(i)
for i in dict1:
    print(i)

這就是python迭代器,好了,講完了,手工。

是的,使用for...in的方式,底層都是使用的是迭代器,你是不是之前寫的時候,從來沒有好奇過,為什么遍歷不同的數據類型,都可以使用for...in通用呢?

為什么需要迭代器

只要符合python迭代器條件的,都可以使用for...in來遍歷元素,即: 使用相同的代碼,遍歷不同的數據容器。 我認為這是根本原因。

如果上述描述還不清晰的話,我們可以使用cpython來遍歷一下數組 和 字符串,就能清晰的了解了。

Python中怎么創建迭代器

如上代碼,是c語言遍歷數組"pdudo","hello","juejin"和字符串pdudohellojuejin,我們需要自己寫遍歷條件的臨界值。

而如何使用python來寫呢? 來看下呢。

list1 = ["pdudo","hello","juejin"]
char1 = "pdudohellojuejin"

for v in list1:
    print(v)

for c in char1:
    print(c)

只需要定義數組和字符串,而后使用for...in便結束了。

我想,如上例子,就足以證明為什么要使用迭代器的原因了,因為真的很爽。

迭代器是如何工作的

在經歷了前2個段落的鋪墊,我猜你肯定很想知道迭代器是如何工作的吧?現在它來了。

在使用for...in語句時,它會調用inter()對象,該函數會返回一個迭代器對象。該對象又定義了__next__()方法,該方法一次返回一個容器元素,當沒有更多元素可以返回的時候,會拋一個StopIteration異常來表明for終止循環。

是不是還是不懂?沒關系,我們再寫一個案例來說明一下。

list1 = ["pdudo","hello","juejin"]

it = iter(list1)
print(next(it))
print(next(it))
print(next(it))
print(next(it))

如上代碼,定義了一個列表,其值為: "pdudo","hello","juejin",而后調用iter方法,它將返回一個迭代器,而后調用next方法來返回下一個元素,但是我們定義的列表長度為3,而調用了4次next方法,可見,最后一次會拋異常。

我們執行后,效果如下:

Python中怎么創建迭代器

可見,和我們上述猜想的一致,在for...in語句中,也是調用inter()容器對象,使用__next__返回后續可迭代的對象,如此類推,直至遇到異常StopIteration,循環結束。

好了,知道迭代器是如何工作了吧? 那么,我們再拋出一個問題,看你能否接住呢? 如何判斷一個數據類型是能夠被迭代的呢?

如何創建一個迭代器

我們已經學會了如何使用迭代器,以及知曉了迭代器是如何工作的,本段落將介紹如何創建一個迭代器,在看這個之前,我們思考一個問題,如下代碼是否會報錯呢?

a = 9527
for i in a:
    print(i)

我們使用for...in來遍歷一個int類型的數據。

如上代碼,當然會報錯,借此引出我們的知識點:什么樣的數據類型才能被迭代呢?

是這樣的,能否被迭代,取決于該方法是否有__iter__方法。

可以看下如下例子,我們自定義了一個迭代器,用于倒敘輸出數據。

#!/bin/env python

class flashBack:
    def __init__(self,list1):
        self.data = list1
        self.index = len(list1)-1

    def __iter__(self):
        return self

    def __next__(self):
        if self.index < 0:
            raise StopIteration

        val = self.data[self.index]
        self.index = self.index - 1
        return val

def main():
    list1 = [1,2,3,4,5]
    tuble1 = ("pdudo","juejin","hello")

    for i in flashBack(list1):
        print(i)

    for i in flashBack(tuble1):
        print(i)

if __name__ == '__main__':
    main()

執行后,結果為:

Python中怎么創建迭代器

可見,創建一個迭代器,至少需要 __iter__方法 和 有__next__方法。

好了,有了這個基礎案例,我們來寫一個鏈表?

#!/bin/env python

class Node:
    def __init__(self,val):
        self.val = val
        self.nextNode = None

class Lists:
    def __init__(self,currentNodes):
        self.currentNode = currentNodes

    def __iter__(self):
        return self

    def __next__(self):
        if self.currentNode is None:
            raise StopIteration

        v = self.currentNode.val
        self.currentNode = self.currentNode.nextNode
        return v



def main() :
    node1 = Node(1)
    node2 = Node(2)
    node3 = Node(3)
    node1.nextNode = node2
    node2.nextNode = node3

    for i in Lists(node1):
        print(i)

if __name__ == '__main__':
    main()

如上代碼,我們先創建節點Node,它有2個值,val是記錄的值,而nextNode是記錄下一個Node的指針,而后定義了類Lists,調用時候,需要傳入一個Node,它會將currentNodes來記錄當前的Node 重點看__next__,當當前節點為空的時候,則返回StopIteration告知for迭代器結束了,否則的話,取出當前節點的val并且返回,且將其下滑到下一個節點。

如上代碼,運行后,結果如下:

Python中怎么創建迭代器

到此,相信大家對“Python中怎么創建迭代器”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

瑞昌市| 宝坻区| 保定市| 伊金霍洛旗| 葵青区| 连南| 永平县| 曲水县| 宁蒗| 康乐县| 十堰市| 禹州市| 岳西县| 新巴尔虎右旗| 新郑市| 长白| 铅山县| 营口市| 通江县| 安福县| 海林市| 永顺县| 芮城县| 仙居县| 大新县| 阿图什市| 方城县| 灌阳县| 怀仁县| 浑源县| 新乡县| 社旗县| 宜川县| 东海县| 涡阳县| 柘城县| 贵港市| 西华县| 淮阳县| 明溪县| 九台市|