Menu
Coddy logo textTech

Implementowanie __next__()

Lekcja 5 z 13 w kursie Iteratory w Pythonie w Coddy.

Metoda __next__() jest kluczowym elementem tworzenia własnych iteratorów w Pythonie. Określa, jak pobrać następny element w sekwencji iteracji. Implementując __next__(), kontrolujesz działanie swojego iteratora, określając, jakie wartości generuje i kiedy powinien się zatrzymać.

Cel metody __next__()

Metoda __next__() spełnia dwa główne zadania:

  1. Zwracanie następnego elementu w sekwencji
  2. Zgłaszanie wyjątku StopIteration, gdy nie ma już więcej elementów

Implementacja __next__()

Oto podstawowa struktura implementacji __next__():

class MyIterator:
    def __init__(self, data):
        self.data = data
        self.index = 0

    def __iter__(self):
        return self

    def __next__(self):
        if self.index >= len(self.data):
            raise StopIteration
        result = self.data[self.index]
        self.index += 1
        return result

Kluczowe aspekty metody __next__()

  • Zarządzanie stanem: Śledź bieżący stan iteracji (np. za pomocą indeksu).
  • Zwracanie następnego elementu: Określ i zwróć następny element w sekwencji.
  • StopIteration: Zgłoś wyjątek StopIteration, gdy nie ma już więcej elementów.
  • Efekty uboczne: Zaktualizuj niezbędny stan wewnętrzny przed następną iteracją.

Przykład: własny iterator zakresu

Oto przykład własnego iteratora, który naśladuje uproszczoną wersję funkcji range()</function> w Pythonie:</p> <pre><code class="language-python">class CustomRange: def __init__(self, start, end): self.current = start self.end = end def __iter__(self): return self def __next__(self): if self.current >= self.end: raise StopIteration result = self.current self.current += 1 return result # Użycie niestandardowego iteratora zakresu for num in CustomRange(1, 5): print(num) # Wyświetla: 1, 2, 3, 4

W tym przykładzie __next__() zwraca bieżącą liczbę i zwiększa ją na potrzeby następnej iteracji, zgłaszając wyjątek StopIteration, gdy osiągnie wartość końcową.

Implementując __next__(), definiujesz podstawowe działanie swojego iteratora, dzięki czemu może on bezproblemowo współpracować z mechanizmami iteracji w Pythonie, takimi jak pętle for i funkcja next().

quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

challenge icon

Wyzwanie

Łatwy

Utwórz własną klasę iteratora o nazwie FibonacciIterator, która generuje liczby Fibonacciego aż do określonego limitu. Ciąg Fibonacciego zaczyna się od 0 i 1, a każda kolejna liczba jest sumą dwóch poprzednich.

Otrzymujesz:

  • Liczbę całkowitą limit jako dane wejściowe

Twoja klasa FibonacciIterator powinna:

  • Implementować metodę __next__(), aby generować kolejną liczbę Fibonacciego
  • Zatrzymać iterację, gdy następna liczba Fibonacciego przekroczyłaby podany limit
  • Zgłaszać wyjątek StopIteration, gdy ciąg się wyczerpie

Po zaimplementowaniu klasy FibonacciIterator utwórz jej instancję, używając limitu z danych wejściowych, i wypisz każdą wygenerowaną liczbę Fibonacciego w nowej linii.

Dane wejściowe zostaną podane jako ciąg znaków reprezentujący liczbę całkowitą.

Spróbuj swoich sił

# Wczytaj dane wejściowe
limit = int(input())

class FibonacciIterator:
    def __init__(self, limit):
        self.limit = limit
        self.a, self.b = 0, 1

    def __iter__(self):
        return self

    def __next__(self):
        # TODO: Zaimplementuj metodę __next__()
        # Wygeneruj następną liczbę Fibonacciego
        # Rzuć wyjątek StopIteration, gdy ciąg się wyczerpie
        pass

# Utwórz instancję klasy FibonacciIterator
fib_iterator = FibonacciIterator(limit)

# TODO: Przejdź przez ciąg Fibonacciego i wypisz każdą liczbę

# Note: Pamiętaj, aby wypisać każdą liczbę Fibonacciego, żeby przejść testy

Wszystkie lekcje w sekcji Iteratory w Pythonie

Poćwicz samodzielnie: Kompilator Python online