iterator ialah sebarang objek yang melaksanakan dua kaedah:
Membuat Iterator Asas:
class Counter: def __init__(self, start, end): self.current = start self.end = end def __iter__(self): return self # Returns itself as an iterator def __next__(self): if self.current >= self.end: raise StopIteration self.current += 1 return self.current - 1 counter = Counter(1, 4) for number in counter: print(number) # Outputs: 1, 2, 3
Kelas ini mengawal panggilan seterusnya() secara manual, berhenti apabila ia sampai ke penghujung. Iterator berfaedah untuk bekerja dengan jujukan di mana setiap elemen diproses atas permintaan.
penjana ialah cara yang lebih mudah untuk mencipta iterator. Ditakrifkan dengan fungsi yang menggunakan kata kunci hasil, ia menangguhkan pelaksanaan fungsi pada hasil dan menyambung semula apabila next() dipanggil. Setiap penyataan hasil menyimpan keadaan fungsi, bermakna ia boleh menyambung dari tempat ia berhenti.
Contoh Penjana Asas:
def countdown(num): while num > 0: yield num num -= 1 for n in countdown(3): print(n) # Outputs: 3, 2, 1
Apabila hasil dipanggil, fungsi mengembalikan nilai semasa dan menjeda, menunggu next() disambung semula.
Penjana mengira nilai secara on-the-fly, yang dipanggil penilaian malas. Tidak seperti senarai, yang menyimpan semua item dalam ingatan, penjana menghasilkan item hanya seperti yang diperlukan, yang sesuai untuk:
Contoh: Membaca Fail Besar dengan Penjana:
def read_large_file(file_path): with open(file_path) as file: for line in file: yield line # Only processes one line at a time
Pendekatan ini menghalang memuatkan keseluruhan fail ke dalam memori, yang amat berguna untuk fail besar.
Ungkapan penjana ialah cara ringkas untuk mencipta penjana, menggunakan kurungan dan bukannya kurungan segi empat sama seperti pemahaman senarai.
Contoh:
squares = (x * x for x in range(5)) print(next(squares)) # Outputs: 0 print(list(squares)) # Outputs remaining: [1, 4, 9, 16]
Di sini, petak hanya mengira nilai apabila diminta, menjadikannya cekap memori.
Hasil daripada penyata berguna untuk mewakilkan sebahagian daripada operasi penjana kepada penjana lain. Ini berguna apabila anda ingin memecahkan penjana kepada sub-penjana untuk kemodulatan.
Contoh:
def generator_a(): yield 1 yield 2 def generator_b(): yield from generator_a() yield 3 for val in generator_b(): print(val) # Outputs: 1, 2, 3
hasil daripada kod penyelarasan, terutamanya dalam rantai penjana yang kompleks atau bersarang.
Penjana amat berguna apabila:
Senarai, sebaliknya, lebih baik apabila:
Dengan iterator dan penjana, Python memberi anda kawalan ke atas pemprosesan data dengan kecekapan dan fleksibiliti memori. Ia penting untuk mengendalikan set data yang besar, data penstriman dan membina objek boleh lelar tersuai.
Kuasai ini, dan anda akan mengendalikan data seperti Python pro! ?
Atas ialah kandungan terperinci Pemahaman Mendalam tentang Python Iterator: Menavigasi Data dengan `__iter__` dan `__next__`. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!