Matlamat halaman ini?adalah untuk menunjukkan dinamik 2 protokol lelaran:
- boleh diubah
- iterator
1. TETAPI TERLEBIH DAHULU (UNTUK MENAMBAH KEPADA PERKATAAN SERUPA YANG MENGELIRUKAN), MARI KITA MENGATASI LElaran
- lelaran - sudah tentu - mengambil item satu demi satu daripada sumber dan melakukan sesuatu dengan setiap satu secara bergilir
- dalam python, ini biasa digunakan dalam
- a) gelung untuk/semasa dan
- b) kefahaman
- secara lalai - struktur ini berulang pada keseluruhan struktur
- kadangkala, walau bagaimanapun, kawalan yang lebih terperinci mungkin diperlukan - seperti dalam penjana
- untuk ini, terdapat 2 konsep/protokol penting, di atasnya banyak Python dibina:
- a) objek boleh lelar
- b) objek lelaran
- kedua-duanya dicerminkan dalam protokol python standard
- ini bukan sesuatu yang tambahan: sebenarnya, untuk/sementara gelung dan pemahaman dibina terus di atas elemen peringkat rendah protokol lelaran ini
2. KAEDAH ITER() MENCIPTA ITERATOR DARIPADA ITERABLE
-
objek boleh lelar (koleksi atau aliran objek) ialah sebarang objek yang boleh dihantar ke dalam fungsi iter() terbina dalam
- sekali melepasi fungsi iter() terbina dalam dan yang mengembalikan objek iterator jenis yang diluluskan, iaitu iterator rentetan dicipta dengan
>>> example_iterator = iter('abc')
>>> example_iterator
<str_iterator object at 0x063DCE38>
Salin selepas log masuk
Salin selepas log masuk
- perhatikan bahawa iterator ialah objek jujukan tersirat yang menyediakan akses berjujukan (bukan rawak!) kepada dataset berjujukan asas
- contohnya objek julat itu sendiri bukan lelaran
- iterator tidak membenarkan akses kepada elemen sewenang-wenang siri asas
- mereka hanya menyediakan akses kepada elemen seterusnya siri
- mereka menyediakan akses berurutan
<!-- THIS IS NOT AN ITERATOR -->
>>> r = range(10)[5]
>>> r
5
Salin selepas log masuk
Salin selepas log masuk
3. NEXT() FUNGSI MENGEMBALIKAN NILAI SETERUSNYA DARIPADA PEMULA
- the built-in next() memerlukan iterator objek - dan ia mengembalikan nilai seterusnya dalam lelaran koleksi
- iterator terdiri daripada 2 komponen:
- mekanisme untuk mendapatkan seterusnya elemen koleksi
- mekanisme untuk menandakan tamat siri
Dalam bahasa pengaturcaraan dengan sistem objek terbina dalam, abstraksi ini biasanya sepadan dengan antara muka tertentu yang boleh dilaksanakan oleh kelas
-
next() membenarkan untuk mempertimbangkan setiap item mengikut giliran / atas permintaan - bukan keseluruhan siri dari awal hingga akhir
- terdapat 2 antara muka lelaran mesej termasuk
-
seterusnya → pertanyaan untuk elemen seterusnya
-
iter → kembalikan iterator
- kekangan: iterator boleh diulang sekali
4. CONTOH BILIK DARJAH - DARI BOLEH LELAR KE LELAR KE PENGECUALIAN BERHENTI
- Python, secara bebas, menimbulkan pengecualian jenis StopIteration
>>> example_iterator = iter('abc')
>>> example_iterator
<str_iterator object at 0x063DCE38>
Salin selepas log masuk
Salin selepas log masuk
5. CONTOH KEHIDUPAN SEBENAR - MENGUJI UNIT BERbilang INPUT TALIAN PERINTAH
- takrif/dapatkan objek boleh lelar seperti senarai ["20.01", "y"]
- lalukan objek boleh lelar ke dalam iter() → buat objek lelaran
- lalukan objek iterator ke next() untuk menghasilkan nilai seterusnya senarai setiap kali fungsi input dipanggil dalam kod
<!-- THIS IS NOT AN ITERATOR -->
>>> r = range(10)[5]
>>> r
5
Salin selepas log masuk
Salin selepas log masuk
- input kali pertama() ditemui, nilai "20.01" diluluskan,
- kali kedua ialah "y"
- kali ketiga ia akan menjadi pengecualian
6. PAUTAN
- https://mypy.readthedocs.io/en/stable/protocols.html#iteration-protocols
- 5.2 Jujukan Tersirat - SICP dalam Python
Atas ialah kandungan terperinci Menjelaskan Iterable vs Iterator dalam Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!