0Pricing
Python Academy · Lekcja

Wyrażenia generatorowe

Proszę tworzyć leniwe sekwencje za pomocą wyrażeń generatorowych, oszczędzając pamięć.

Wyrażenia generatorowe to bezpłatna lekcja Python Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Python Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Python Academy zawiera 4 lekcji w sumie.

Wprowadzenie

Wyrażenia generatorowe to leniwe list comprehensions — zwracają wartości pojedynczo, bez tworzenia listy w pamięci.

Składnia wyrażenia generatorowego

(expression for item in iterable) używa nawiasów okrągłych. Zwraca obiekt generatora, a NIE listę.
gen = (x**2 for x in range(5))
print(gen)  # generator object
print(next(gen))  # 0
print(next(gen))  # 1

Efektywne wykorzystanie pamięci

Generator przechowuje w danym momencie tylko jedną wartość. sum(x**2 for x in range(10**7)) używa pamięci O(1), w przeciwieństwie do listy.
total = sum(x**2 for x in range(100))
print(total)

Korzystanie z generatora

Z generatora można skorzystać tylko raz. Po wyczerpaniu zostaje zgłoszony StopIteration i nie ma już żadnych wartości.
gen = (x for x in range(3))
for val in gen:
    print(val)
# gen is now exhausted

Generator jako argument funkcji

Jeśli generator jest jedynym argumentem, można pominąć dodatkowe nawiasy: sum(x**2 for x in range(10)).
print(sum(x**2 for x in range(10)))
print(max(len(w) for w in ['cat', 'elephant', 'ant']))

Łączenie generatorów

Generatory można leniwie łączyć: evens = (x for x in range(100) if x%2==0); big = (x for x in evens if x>50).
evens = (x for x in range(100) if x % 2 == 0)
big_evens = (x for x in evens if x > 50)
print(list(big_evens))

Konwertowanie na listę lub krotkę

list(gen) lub tuple(gen) materializuje wszystkie wartości. Należy to robić, gdy potrzebny jest swobodny dostęp do elementów lub wiele przejść po danych.
gen = (x**2 for x in range(5))
print(list(gen))

Wyrażenie generatorowe a list comprehension

Generatora należy używać, gdy dane są przetwarzane tylko raz lub zbiór danych jest duży. Listy należy używać, gdy potrzebne są len(), indeksowanie lub wiele przejść po danych.
import sys
lst = [x**2 for x in range(1000)]
gen = (x**2 for x in range(1000))
print(sys.getsizeof(lst), sys.getsizeof(gen))

Nieskończone generatory

itertools.count(0) to nieskończony licznik. Należy połączyć go z islice, aby pobrać tylko potrzebne wartości.
import itertools
first10 = list(itertools.islice(itertools.count(0), 10))
print(first10)

any() i all() z generatorami

any(x>5 for x in lst) stosuje ewaluację skróconą — zatrzymuje się przy pierwszej wartości True. all() zatrzymuje się przy pierwszej wartości False. Jest to bardzo wydajne.
nums = [1, 3, 7, 2]
print(any(x > 5 for x in nums))
print(all(x > 0 for x in nums))

Potoki

Przekształcenia można łączyć leniwie: dane → filtrowanie → przekształcanie → agregowanie. Każdy etap jest generatorem; nic nie jest wykonywane, dopóki nie okaże się potrzebne.
data = range(1000)
filtered = (x for x in data if x % 7 == 0)
transformed = (x * 2 for x in filtered)
print(sum(transformed))

Szybkie sprawdzenie

Jaka jest kluczowa zaleta wyrażenia generatorowego względem list comprehension pod względem użycia pamięci?

Podsumowanie

Wyrażenia generatorowe: (expr for x in it). Leniwa ewaluacja — pamięć O(1). Można je wykorzystać tylko raz. Należy używać ich z sum/any/all/max. Gdy potrzebnych jest wiele przejść po danych, należy przekonwertować generator na listę.

Proszę kontynuować

Doskonale! Proszę przejść do następnej lekcji, aby pogłębić swoje umiejętności.

Często zadawane pytania

Czy lekcja „Wyrażenia generatorowe” jest bezpłatna?

Tak — pełny tekst „Wyrażenia generatorowe” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Python Academy, przejdź na CoddyKit PRO. Kurs Python Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Wyrażenia generatorowe”?

Proszę tworzyć leniwe sekwencje za pomocą wyrażeń generatorowych, oszczędzając pamięć. Ćwiczysz Python Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Python Academy?

Nie wymagamy żadnego doświadczenia. Python Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Wyrażenia generatorowe”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Python Academy?

Tak. Każda lekcja Python Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Rozumienie listowe
  2. Rozumienie zbiorów i słowników
  3. Wyrażenia generatorowe
  4. Słowo kluczowe yield
← Powrót do Python Academy