0Pricing
Python Academy · Lekcja

Generatory

Poznaj generatory i dowiedz się, jak wykorzystywać je do tworzenia iteratorów

Generatory to bezpłatna lekcja Python Academy na CoddyKit. To lekcja 2 z 5. 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 5 lekcji w sumie.

Wprowadzenie do generatorów

Wprowadzenie do generatorów

Generatory to specjalny rodzaj iteratorów w Pythonie, który umożliwia leniwe iterowanie po danych. Zamiast zwracać wszystkie dane naraz, generatory zwracają po jednym elemencie, dzięki czemu efektywnie wykorzystują pamięć.

W tej lekcji dowiedzą się Państwo, jak tworzyć i używać generatorów w Pythonie.

Generatory — ilustracja 1

Czym jest generator?

Czym jest generator?

Generator to funkcja, która używa słowa kluczowego yield, aby zwracać wartości pojedynczo. Każde wywołanie metody next() generatora wznawia wykonanie od miejsca, w którym generator ostatnio zwrócił wartość.

# Basic generator example
def my_generator():
    yield 1
    yield 2
    yield 3

# Using the generator
gen = my_generator()
print(next(gen))  # Outputs: 1
print(next(gen))  # Outputs: 2
print(next(gen))  # Outputs: 3

Jak działają generatory

Jak działają generatory

Generatory zapisują stan funkcji, dzięki czemu mogą wznowić wykonanie dokładnie w miejscu, w którym je przerwały. Dzięki temu efektywnie wykorzystują pamięć i doskonale nadają się do pracy z dużymi zbiorami danych.

# Example: Generating a range of numbers
def range_generator(start, end):
    while start < end:
        yield start
        start += 1

for number in range_generator(1, 5):
    print(number)  # Outputs: 1, 2, 3, 4

Wyrażenia generatorowe

Wyrażenia generatorowe

Wyrażenia generatorowe przypominają wyrażenia listowe, ale zamiast nawiasów kwadratowych używają nawiasów okrągłych. Tworzą generatory, a nie listy.

# Generator expression
gen_exp = (x * x for x in range(5))

for value in gen_exp:
    print(value)  # Outputs: 0, 1, 4, 9, 16

Generatory a listy

Generatory a listy

Generatory efektywniej wykorzystują pamięć niż listy, ponieważ nie przechowują wszystkich danych w pamięci. Zamiast tego generują dane na bieżąco.

# Comparing lists and generators
# List comprehension
list_comp = [x * x for x in range(1000000)]

# Generator expression
gen_exp = (x * x for x in range(1000000))

# List comprehension uses more memory
print(type(list_comp))  # Outputs: <class 'list'>
print(type(gen_exp))    # Outputs: <class 'generator'>

Zastosowania generatorów

Zastosowania generatorów

Generatory doskonale nadają się do:

  • przetwarzania dużych zbiorów danych, które nie mieszczą się w pamięci,
  • generowania nieskończonych sekwencji,
  • leniwego obliczania danych.

Nieskończone generatory

Nieskończone generatory

Generatory mogą tworzyć nieskończone sekwencje, na przykład nieskończony ciąg liczb. Należy pamiętać o zatrzymaniu pętli, aby zapobiec nieskończonemu wykonywaniu programu.

# Infinite generator example
def infinite_sequence():
    num = 0
    while True:
        yield num
        num += 1

# Using the infinite generator
for i in infinite_sequence():
    if i > 5:
        break
    print(i)  # Outputs: 0, 1, 2, 3, 4, 5

Funkcje generatorowe z wieloma instrukcjami yield

Funkcje generatorowe z wieloma instrukcjami yield

Funkcje generatorowe mogą zawierać wiele instrukcji yield, co pozwala tworzyć złożone sekwencje:

# Multiple yields in a generator
def multi_yield():
    yield "First"
    yield "Second"
    yield "Third"

for value in multi_yield():
    print(value)  # Outputs: First, Second, Third

Typowe błędy związane z generatorami

Typowe błędy związane z generatorami

Oto błędy, których należy unikać:

  • używanie return zamiast yield w funkcji generatorowej,
  • niepobieranie elementów generatora za pomocą pętli lub next(),
  • używanie generatorów dla małych zbiorów danych, dla których bardziej odpowiednie są listy.

Czego się nauczyliśmy?

Czego się nauczyliśmy?

W tej lekcji dowiedzieli się Państwo:

  • czym są generatory i jak działają w Pythonie,
  • jak używać yield do tworzenia funkcji generatorowych,
  • czym różnią się generatory od list,
  • jakie są zastosowania generatorów, na przykład do tworzenia nieskończonych sekwencji i przetwarzania dużych zbiorów danych.

Świetna praca! Przejdźmy do następnego tematu.

Generatory — ilustracja 11

Często zadawane pytania

Czy lekcja „Generatory” jest bezpłatna?

Tak — pełny tekst „Generatory” 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 5 lekcji w sumie.

Co nauczysz się w „Generatory”?

Poznaj generatory i dowiedz się, jak wykorzystywać je do tworzenia iteratorów Ć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 2 z 5.

Ile czasu zajmuje lekcja „Generatory”?

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. Dekoratory
  2. Generatory
  3. Menedżery kontekstu (instrukcje with)
  4. Składane struktury danych (listy, zbiory i słowniki)
  5. Iteratory i obiekty iterowalne
← Powrót do Python Academy