Wyrażenia generatorowe
Lekcja 9 z 13 w kursie Iteratory w Pythonie w Coddy.
Wyrażenia generatorowe to zwięzły sposób tworzenia iteratorów w Pythonie. Stanowią bardziej oszczędną pamięciowo alternatywę dla składni listowej, szczególnie w przypadku dużych zbiorów danych lub nieskończonych sekwencji.
Składnia wyrażeń generatorowych
Wyrażenia generatorowe mają składnię podobną do składni listowej, ale używają nawiasów okrągłych zamiast kwadratowych:
(expression for item in iterable if condition)Najważniejsze cechy
- Leniwa ewaluacja: wyrażenia generatorowe zwracają elementy pojedynczo i tylko na żądanie, oszczędzając pamięć.
- Iteratory jednorazowego użytku: po wyczerpaniu nie można ich ponownie użyć bez ponownego utworzenia generatora.
- Zwięzła składnia: pozwalają w kompaktowy sposób definiować proste funkcje generatorowe.
Przykład użycia
Oto prosty przykład wyrażenia generatorowego, które zwraca kwadraty liczb:
squares = (x**2 for x in range(5))
for square in squares:
print(square) # Wypisuje: 0, 1, 4, 9, 16
Porównanie ze składnią listową
Choć ich składnia jest podobna, wyrażenia generatorowe różnią się od składni listowej pod względem zużycia pamięci:
# Wyrażenie listowe (tworzy całą listę w pamięci)
squares_list = [x**2 for x in range(1000000)]
# Wyrażenie generatorowe (tworzy obiekt generatora)
squares_gen = (x**2 for x in range(1000000))
Wyrażenie generatorowe jest bardziej oszczędne pamięciowo, ponieważ nie tworzy wszystkich wartości jednocześnie.
Zastosowania
Wyrażenia generatorowe są szczególnie przydatne podczas:
- Pracy z dużymi zbiorami danych
- Przetwarzania strumieni danych
- Tworzenia potoków przetwarzania danych
Korzystając z wyrażeń generatorowych, możesz tworzyć wydajne i przyjazne dla pamięci iteratory do różnych zadań przetwarzania danych w Pythonie.
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wyzwanie
ŁatwyUtwórz wyrażenie generatorowe, które filtruje i przekształca sekwencję liczb. Generator powinien zwracać kwadraty liczb parzystych z podanego zakresu.
Otrzymujesz:
- Dwie liczby całkowite na wejściu:
startiend(włącznie)
Twoje zadanie:
- Utwórz wyrażenie generatorowe, które:
- Iteruje po zakresie od
startdoend(włącznie) - Odfiltrowuje liczby nieparzyste
- Podnosi pozostałe liczby parzyste do kwadratu
- Iteruje po zakresie od
- Użyj wyrażenia generatorowego w pętli, aby wypisać każdą otrzymaną wartość w nowym wierszu
Dane wejściowe zostaną podane jako dwie liczby całkowite rozdzielone spacją, reprezentujące start i end.
Spróbuj swoich sił
# Wczytaj dane wejściowe
start, end = map(int, input().split())
# TODO: Utwórz tutaj wyrażenie generatorowe
generator_exp = None # Zastąp None wyrażeniem generatorowym
# Wypisz wyniki
for value in generator_exp:
print(value)Wszystkie lekcje w sekcji Iteratory w Pythonie
2Tworzenie własnych iteratorów
Implementowanie __iter__()Implementowanie __next__()Iteratory nieskończonePoćwicz samodzielnie: Kompilator Python online