Jak stworzyć własny iterator w Pythonie?

Iteratory w Pythonie to potężne narzędzia pozwalające na przeglądanie kolekcji (takich jak listy, krotki) element po elemencie. Python oferuje wbudowane wsparcie dla tworzenia i używania iteratorów, co czyni je nieodzownym elementem efektywnego kodowania. W tym artykule pokażemy, jak możesz stworzyć własny iterator, korzystając z metod specjalnych __iter__() i __next__().

Kompletny przykład kodu z użyciem własnego iteratora

Załóżmy, że chcemy stworzyć klasę ReverseIterator, która umożliwia iterację po elementach dowolnej sekwencji, ale w odwrotnej kolejności. Oto jak możemy to zrobić:

class ReverseIterator:
    """Klasa umożliwiająca iterację w odwrotnej kolejności"""
    
    def __init__(self, data):
        # Inicjalizacja z danymi do iteracji
        self.data = data
        self.index = len(data)
    
    def __iter__(self):
        # Metoda zwracająca obiekt iteratora
        return self
    
    def __next__(self):
        # Następny element w sekwencji
        if self.index == 0:
            raise StopIteration  # Kończy iterację
        self.index -= 1
        return self.data[self.index]

# Użycie własnego iteratora
my_sequence = [1, 2, 3, 4, 5]
reverse_iterator = ReverseIterator(my_sequence)

for element in reverse_iterator:
    print(element)  # Wyświetla 5, 4, 3, 2, 1

W tym przykładzie, klasa ReverseIterator jest naszym własnym iteratorem, który przechodzi przez podaną sekwencję w odwrotnej kolejności. Metoda __iter__() zwraca obiekt iteratora (w tym przypadku self), a metoda __next__() zwraca kolejne elementy sekwencji przy każdym wywołaniu, aż do osiągnięcia końca sekwencji, kiedy to zgłaszany jest wyjątek StopIteration.

Podsumowanie

Tworzenie własnych iteratorów w Pythonie otwiera przed programistami nowe możliwości manipulowania danymi i tworzenia bardziej elastycznych oraz czytelnych rozwiązań. Dzięki metodom specjalnym __iter__() i __next__(), możemy z łatwością zdefiniować, jak Python powinien iterować przez nasze własne typy danych. Przykład ReverseIterator pokazuje, jak prosto można zaimplementować własny iterator, dając tym samym większą kontrolę nad procesem iteracji.

Jeżeli chcesz przyśpieszyć swoją naukę tworzenia stron chciałbym polecić mój kurs video Python w którym nauczysz się tego języka od podstaw do zaawansowanych jego aspektów.

Scroll to Top