Bagaimana untuk membuat iterator dalam Python?

WBOY
Lepaskan: 2023-04-21 12:10:08
ke hadapan
1310 orang telah melayarinya

Apakah itu iterator

Apakah itu pythoniterator? Mari kita ambil contoh paling mudah:

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)
Salin selepas log masuk

Ini adalah python lelaran Okey, itu sahaja, mari lakukannya secara manual.

Ya, menggunakan kaedah for...in, lapisan bawah menggunakan iterator Adakah anda tidak pernah ingin tahu semasa anda menulis sebelum ini. Mengapa anda boleh menggunakannya untuk melintasi jenis data yang berbeza? for...in

Saudara saya, saya juga tidak pernah terfikir mengapa saya boleh menulis seperti ini. Kita telah pun bercakap tentang sintaks iterator Seterusnya, mari kita kupas tabir iterator.

Mengapa iterator diperlukan

Selagi ia memenuhi syarat

iterator, anda boleh menggunakan python untuk melintasi elemen, iaitu: for...inGunakan kod yang sama untuk melintasi bekas data yang berbeza. Saya rasa inilah puncanya.

Jika penerangan di atas masih belum jelas, kita boleh menggunakan

dan c untuk melintasi tatasusunan dan rentetan, dan kita akan mempunyai pemahaman yang jelas. python

Bagaimana untuk membuat iterator dalam Python?

Kod di atas adalah untuk merentasi tatasusunan

dan rentetanc dalam bahasa "pdudo","hello","juejin" Kita perlu menulis nilai kritikal keadaan traversal diri kita sendiri. pdudohellojuejin

Dan bagaimana menggunakan

untuk menulis? Mari kita lihat. python

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

for v in list1:
    print(v)

for c in char1:
    print(c)
Salin selepas log masuk
Anda hanya perlu mentakrif tatasusunan dan rentetan, kemudian gunakan

untuk menamatkannya. for...in

Saya rasa contoh di atas sudah cukup untuk membuktikan mengapa anda perlu menggunakan iterator, kerana ia sangat menyeronokkan.

Cara iterator berfungsi

Setelah melalui penyediaan dua perenggan pertama, saya rasa anda mesti ingin tahu bagaimana iterator berfungsi kan? Sekarang dah sampai.

Apabila menggunakan pernyataan

, ia memanggil objek for...in, yang mengembalikan objek lelaran. Objek ini juga mentakrifkan kaedah inter(), yang mengembalikan satu elemen bekas pada satu masa Apabila tiada lagi elemen boleh dikembalikan, pengecualian __next__() akan dilemparkan untuk menunjukkan bahawa StopIteration menamatkan gelung. for

Masih tidak faham? Tidak mengapa, mari kita tulis satu lagi kes untuk menggambarkan.

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

it = iter(list1)
print(next(it))
print(next(it))
print(next(it))
print(next(it))
Salin selepas log masuk
Kod di atas mentakrifkan senarai yang nilainya ialah: "pdudo", "hello", "juejin", dan kemudian memanggil kaedah

, yang akan mengembalikan iterator, dan kemudian memanggil kaedah iter untuk mengembalikan elemen seterusnya, tetapi panjang senarai yang kami takrifkan ialah 3, dan kaedah next dipanggil 4 kali. Ia boleh dilihat pada kali terakhir pengecualian akan dilemparkan. next

Selepas kami melaksanakan, kesannya adalah seperti berikut:

Bagaimana untuk membuat iterator dalam Python?

Dapat dilihat bahawa, konsisten dengan sangkaan kami di atas, dalam pernyataan

, bekas for...in juga dipanggil Objek, gunakan inter() untuk mengembalikan objek boleh lelar seterusnya, dan seterusnya, sehingga pengecualian __next__ ditemui dan gelung berakhir. StopIteration

Baiklah, adakah anda tahu cara iterator berfungsi? Jadi, mari kita lemparkan soalan lain untuk melihat sama ada anda boleh menjawabnya? Bagaimana untuk menentukan sama ada jenis data boleh diulang?

Cara membuat iterator

Kami telah mempelajari cara menggunakan iterator dan mengetahui cara iterator berfungsi Perenggan ini akan memperkenalkan cara membuat iterator Sebelum melihat perkara ini, mari kita fikirkan soalan , adakah kod berikut akan melaporkan ralat?

a = 9527
for i in a:
    print(i)
Salin selepas log masuk
Kami menggunakan

untuk melintasi jenis for...in data. int

Kod di atas sudah tentu akan melaporkan ralat, yang membawa kepada titik pengetahuan kami: Apakah jenis jenis data yang boleh diulang?

adalah seperti ini sama ada ia boleh diulang bergantung kepada sama ada kaedah itu mempunyai kaedah

. __iter__

Anda boleh lihat contoh berikut. Kami telah menyesuaikan iterator untuk data output imbas kembali. Selepas

#!/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__ == &#39;__main__&#39;:
    main()
Salin selepas log masuk
dilaksanakan, hasilnya ialah:

Bagaimana untuk membuat iterator dalam Python?

Ia boleh dilihat bahawa untuk mencipta iterator, sekurang-kurangnya kaedah

dan kaedah __iter__ diperlukan. __next__

Baiklah, dengan kes asas ini, mari tulis senarai terpaut?

#!/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__ == &#39;__main__&#39;:
    main()
Salin selepas log masuk
Seperti yang ditunjukkan dalam kod di atas, kami mula-mula mencipta nod

, yang mempunyai 2 nilai, Node ialah nilai yang direkodkan dan val ialah penunjuk untuk merekodkan yang seterusnya nextNode, dan kemudian mentakrifkan kelas Node, apabila memanggil, anda perlu memasukkan Lists, ia akan menggunakan Node untuk merakam currentNodes semasa , ia akan mengembalikan Node untuk memberitahu Peulang __next__ telah tamat, jika tidak, keluarkan StopIteration nod semasa dan kembalikannya, dan luncurkannya ke nod seterusnya. forvalKod di atas, selepas dijalankan, hasilnya adalah seperti berikut:

Atas ialah kandungan terperinci Bagaimana untuk membuat iterator dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan