Apabila bekerja dengan struktur data dalam Python, iterator menyediakan mekanisme yang berkuasa untuk melintasi elemen mereka. Dengan mencipta iterator, anda boleh mengawal bagaimana dan di mana data diakses, membolehkan pemprosesan yang fleksibel dan cekap.
Untuk membina lelaran asas, anda perlu melaksanakan dua perkara penting kaedah yang ditakrifkan oleh protokol iterator:
1. __iter__():
2. __next__() (Python 2: next()):
Sebagai contoh, pertimbangkan kelas Contoh berikut yang mengandungi senarai nilai:
class Example: def __init__(self, values): self.values = values
Untuk mendayakan lelaran ke atas nilai, kita boleh menentukan lelaran:
class ValueIterator: def __init__(self, example): self.example = example self.index = 0 def __iter__(self): return self def __next__(self): if self.index < len(self.example.values): value = self.example.values[self.index] self.index += 1 return value else: raise StopIteration
Iterators memberikan fleksibiliti yang hebat dengan membenarkan anda menyesuaikan sumber dan tingkah laku perolehan semula nilai. Sebagai contoh, anda boleh melaksanakan iterator yang mengira nilai dengan pantas berdasarkan algoritma atau sumber data tertentu.
Iterators berasaskan penjana ialah pendekatan alternatif yang menggunakan Python's kata kunci hasil. Daripada mengembalikan contoh kelas, fungsi penjana menghasilkan nilai seterusnya dalam jujukan, menjadikan lelaran lebih padat dan cekap memori.
Menggunakan kelas Contoh dan ValueIterator, kami boleh lelaran ke atas nilai dan lakukan operasi pada setiap satu:
e = Example([1, 2, 3]) it = ValueIterator(e) for value in it: print(f"The example object contains {value}")
Ini akan print:
The example object contains 1 The example object contains 2 The example object contains 3
Dengan memahami protokol iterator dan menggunakan iterator, anda memperoleh kuasa untuk melintasi struktur data secara cekap dan fleksibel, sama ada ia memegang nilai yang telah ditetapkan atau unsur yang dijana secara dinamik.
Atas ialah kandungan terperinci Bagaimanakah Iterators Python Mendayakan Traversal Struktur Data yang Cekap dan Fleksibel?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!