Rumah > pembangunan bahagian belakang > Tutorial Python > Menjelaskan Iterable vs Iterator dalam Python

Menjelaskan Iterable vs Iterator dalam Python

Susan Sarandon
Lepaskan: 2025-01-01 07:42:18
asal
784 orang telah melayarinya

Explaining Iterable vs Iterator in Python

Matlamat halaman ini?adalah untuk menunjukkan dinamik 2 protokol lelaran:

  1. boleh diubah
  2. 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

  1. takrif/dapatkan objek boleh lelar seperti senarai ["20.01", "y"]
  2. lalukan objek boleh lelar ke dalam iter() → buat objek lelaran
  3. 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!

sumber:dev.to
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan