W tym artykule omówimy iterator Python. Iterator jest obiektem o stanie i pamięta, gdzie jest i kiedy itera. Zwraca pojedynczy obiekt. Używa metod ITER () i Next (). Służy to do tworzenia generatorów pętli, zrozumienia i Pythona.
Konwertuj dowolną sekwencję na iterator za pomocą następującej składni:
ITER (sekwencja)Aby uzyskać dostęp do następnego elementu, używana jest następna funkcja (). Każdy obiekt w Pythonie, który obsługuje dwie poprzednie metody, nazywa się iterator. Aby to sprawdzić, uruchom metodę wbudowaną dir () na obiekcie.
Przykład: print (dir (lista))
Tutaj lista nie jest iteratorem, ponieważ nie ma metody „__Next__”.
Jeśli spróbujemy uzyskać dostęp do następnych elementów, otrzymujemy wyjątek w następujący sposób:
Aby przekonwertować go jako iterator, przejdź listę do metody ITER, jak pokazano następujące. Następnie widzimy metodę „__Next__”.
Różnica między iteratorem a iterabiną
Iterable oznacza, że możemy zapętlić wartości takie jak lista, krotek, ciąg itc. Wszystkie obiekty mają metodę ITER (), która służy do uzyskania iteratora. Zobaczymy kilka przykładów, aby lepiej to zrozumieć:
Przykład:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | NUMS = [1,2,3,4,5] NUMSiterator = iTer (NUMS) #same jako NUMSiterator = NUMS.__iter __ () # Wewnętrznie wywoła metodę __iter__ print (następny (NUMSITEROR)) # dostęp do 1. elementu print (Next (NUMSITEROR)) # dostęp do 2. elementu print (Next (NUMSITEROR)) # dostęp do 3. elementu i tak dalej… print (następny (NUMSiterator)) print (następny (NUMSiterator)) print (następny (NUMSiterator)) |
Kiedy dotrzemy do końca listy, podnosi błąd przerwy.
Notatka: Wszystko, co zaczyna się od podwójnego podkreślenia i kończy się na podwójnym podkreśleniu w Pythonie, nazywa się metodą Dunder.
Przypadek użycia iteratorów
Przykład 1:
Drukujemy każdą postać za pomocą pętli dla.
1 2 3 4 5 | s = „Dzień dobry” Dla Char in s: Drukuj (char) |
Przykład 2:
Drukujemy ten sam ciąg za pomocą iteratorów.
1 2 3 4 5 6 7 8 9 10 11 | s = „Dzień dobry” Word = iter (s) Choć prawda: próbować: item = następny (słowo) Drukuj (element) Z wyjątkiem przerwy: przerwa |
Przykład 3:
Aby zbudować własną funkcję zakresu, funkcja zasięgu podaje zakres wartości od początku do końca (wyłączny).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | klasa myrange: def __init __ (self, start, stop): samego siebie.val = start samego siebie.stop = stop def __iter __ (self): powrót do siebie def __Next __ (ja): Jeśli ja.val> = self.zatrzymywać się: Podnieś przerwanie Current = Self.val samego siebie.val += 1 zwrócić prąd NUMS = MyRange (1,5) Drukuj (następny (NUMS)) Drukuj (następny (NUMS)) Drukuj (następny (NUMS)) Drukuj (następny (NUMS)) Drukuj (następny (NUMS)) |
Piszemy poprzednią funkcję za pomocą generatora.
Przykład 4:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | def my_range (start, koniec): prąd = start podczas gdy obecny < end: Udaj prąd prąd += 1 NUMS = my_range (1,5) Drukuj (następny (NUMS)) Drukuj (następny (NUMS)) Drukuj (następny (NUMS)) Drukuj (następny (NUMS)) |
Lub możemy wywołać następujące informacje, które wytwarzają to samo wyjście, co poprzedni przykład.
1 2 3 | dla NUM in Nums: druk (num) |
Wniosek
Iterator nie musi się kończyć tak długo, jak jest tam wartość; Utrzymuje nam wartość. Pobiera jedną wartość na raz. Jest to naprawdę przydatne podczas pisania programów wydajnych pamięci, w których mamy wiele wartości, których nie możemy pamiętać, jeśli umieścimy je na liście lub krotności. Możemy zapisać zasób za pomocą tego.