Rumah >pembangunan bahagian belakang >Tutorial Python >Protokol iterator dan kaedah traversal dalam pengaturcaraan Python
Pengenalan bahagian sebelumnya seharusnya memudahkan kita untuk memahami dan menguasai objek dan iterator yang boleh lelar (Iterable & Iterator) dalam Python.. Dalam kandungan ini, kami akan memperkenalkan kandungan iterator yang berkaitan.
Protokol IteratorDalam Python, objek iterator (Iterator) perlu menyokong dua kaedah berikut, yang bersama-sama membentuk protokol iterator:
1) __iter__():
Kaedah objek ini mengembalikan objek iterator itu sendiri. Ini diperlukan untuk bekas dan iterator untuk digunakan dengan pernyataan untuk masuk. Anda juga boleh menggunakan fungsi iter() terbina dalam, yang pada asasnya memanggil kaedah __iter__() di belakang tabir.2) __next__():
Kembalikan item seterusnya daripada iterator. Jika tiada item lain, pengecualian StopIteration dilemparkan. Anda juga boleh menggunakan fungsi next() terbina dalam untuk membaca item seterusnya, yang pada asasnya memanggil kaedah __next__(). Seperti yang kami katakan sebelum ini, senarai, tupel, kamus dan set adalah semua jenis yang boleh diubah. Dalam erti kata lain, ia adalah jenis dari mana iterator boleh diperolehi. Lihat contoh: Senarai coretan kod-01Hasil input adalah seperti berikut:A B CDalam kod contoh, kami mentakrifkan Iterate over tupel. Kemudian panggil fungsi iter() pada objek iterable ini. Fungsi iter() mengembalikan iterator, yang kami namakan tupIter. Kemudian panggil fungsi next() beberapa kali. Setiap kali fungsi next() dilaksanakan, ia akan mengembalikan item seterusnya secara automatik dalam iterator. Lihat contoh kod seterusnya: Kod Fragmen-02Hasil keluaran yang sedang dijalankan ialah:
P yDalam penyenaraian kod di atas, kaedah __iter__() dipanggil pada objek rentetan. Objek rentetan melaksanakan protokol lelaran, jadi rentetan ialah objek boleh lelar yang mengandungi jujukan aksara. Memanggil kaedah __iter__() terus mengembalikan iterator. Kemudian panggil kaedah __next__() melalui iterator yang dikembalikan untuk mengeluarkan elemen dalam iterator satu demi satu. Ringkasnya, selagi objek melaksanakan protokol lelaran, objek boleh dipanggil secara lelaran mengikut dua kaedah di atas. Iterator traversal Seperti yang kita lihat dalam pengenalan sebelumnya, kita secara manual melelaran melalui item iterator menggunakan fungsi next() (atau kaedah __next__()). Apabila fungsi next() mencapai penghujung iterator, tiada lagi data untuk dikembalikan dan anda akan mendapat pengecualian StopIteration. Sila lihat contoh: Senarai Fragmen Kod-03Jalankan atur cara di atas, output akan sama seperti berikut :
10 20 30 Traceback (most recent call last): File ……, in print(next(listIter)) StopIteration |
Dalam kod di atas, fungsi next() dipanggil empat kali, iaitu lebih daripada bilangan item dalam iterator. Dalam panggilan terakhir, pengecualian StopIteration telah dilemparkan - kerana elemen dalam iterator telah diulang. Selain itu, untuk memastikan pengecualian boleh dilemparkan selepas lelaran manual selesai, pengendalian pengecualian mesti dilakukan sendiri, jika tidak, pelaksanaan berikutnya tidak lagi normal.
Apa yang perlu disedari ialah dalam kebanyakan senario, kita tidak perlu memanggil sendiri kaedah seterusnya secara manual Gelung for dalam Python boleh secara automatik melintasi mana-mana objek yang boleh mengembalikan lelaran. Dalam erti kata lain, gelung for boleh lelaran ke atas mana-mana objek lelaran dalam Python.
Lihat contoh:
Coretan Penyenaraian Kod 04
Dalam kod di atas, kami menggunakan gelung for untuk berulang melalui senarai ditakrifkan lebih awal. Jelas sekali bahawa kami tidak menggunakan fungsi next() secara manual dan tidak mendapat sebarang pengecualian StopIteration. Inilah keindahan for loop dalam Python. Ia mengendalikan semua ini untuk kita di belakang tabir.
Sudah tentu, kami boleh mengendalikan sendiri lelaran gelung dengan cara ini. Sekarang tentukan versi gelung for kita sendiri. Kami akan menggunakan gelung sementara dan meniru kelakuan gelung for. Di sini, kami membina sendiri segala yang diperlukan untuk pelaksanaan ini. Seperti yang ditunjukkan di bawah:
Coretan Penyenaraian Kod-05
Dalam penyenaraian di atas, kami telah melaksanakan versi kami sendiri bagi gelung simulasi. Gelung while tak terhingga digunakan dalam kod: while True. Blok try-except disediakan di dalam gelung. Dalam blok cuba, dapatkan elemen seterusnya dengan memanggil kaedah __next__() pada iterator. Jika panggilan berjaya, elemen dicetak. Jika ralat jenis StopIteration berlaku, pengecualian terperangkap dalam blok except. Apa yang anda lakukan dalam blok kecuali adalah sangat mudah. Kami baru sahaja keluar dari gelung ini, yang bermaksud kami telah mencapai penghujung lelaran.
Itu sahaja untuk artikel ini, yang terutamanya memperkenalkan protokol lelaran dan traversal lelaran. Teks kandungannya tidak panjang, dan digabungkan dengan kod boleh membantu anda lebih memahami dan menguasai mata pengetahuan pengaturcaraan Python ini.
Atas ialah kandungan terperinci Protokol iterator dan kaedah traversal dalam pengaturcaraan Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!