Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Kaedah `__iter__` dan `__next__` Python Mendayakan Penciptaan Iterator?

Bagaimanakah Kaedah `__iter__` dan `__next__` Python Mendayakan Penciptaan Iterator?

Patricia Arquette
Patricia Arquetteasal
2025-01-02 19:19:43835semak imbas

How Do Python's `__iter__` and `__next__` Methods Enable Iterator Creation?

Mencipta Iterator dalam Python

Python iterator ialah objek yang mematuhi protokol iterator, menampilkan __iter__() dan __next__() kaedah.

iter Kaedah:

Kaedah __iter__() mengembalikan objek lelaran, secara automatik dipanggil pada permulaan gelung.

seterusnya Kaedah:

Kaedah __next__() mendapatkan semula nilai seterusnya dan secara tersirat dipanggil semasa kenaikan gelung. Ia menimbulkan pengecualian StopIteration apabila tiada lagi nilai tersedia, yang dikesan oleh binaan gelung dan digunakan untuk menghentikan lelaran.

Sebagai contoh, pertimbangkan kelas pembilang ringkas berikut:

class Counter:
    def __init__(self, low, high):
        self.current = low - 1
        self.high = high

    def __iter__(self):
        return self

    def __next__(self): # Python 2: def next(self)
        self.current += 1
        if self.current < self.high:
            return self.current
        raise StopIteration

Apabila menggunakan Kaunter:

for c in Counter(3, 9):
    print(c)

Output akan be:

3
4
5
6
7
8

Sebagai alternatif, penjana menawarkan pendekatan yang lebih mudah untuk penciptaan lelaran:

def counter(low, high):
    current = low
    while current < high:
        yield current
        current += 1

Menggunakan penjana:

for c in counter(3, 9):
    print(c)

Menghasilkan output yang sama. Secara dalaman, penjana menyerupai kelas Counter, menyokong protokol iterator.

Untuk gambaran keseluruhan menyeluruh tentang iterator, sila rujuk artikel David Mertz, "Iterators and Simple Generators."

Atas ialah kandungan terperinci Bagaimanakah Kaedah `__iter__` dan `__next__` Python Mendayakan Penciptaan Iterator?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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