Cykl: Asynchroniczność w Pythonie - wprowadzenie do asyncio · Część 6/14

Tworzenie nieskończonych sekwencji za pomocą generatorów w Pythonie

Kacper Sieradziński
Kacper Sieradziński19 czerwca 2025 · 2 min czytania
Streszczenie
  • Dlaczego warto używać generatorów?
  • Jak tworzyć generatory w Pythonie?
  • Podstawy działania generatorów
  • Użycie generatorów w praktyce
Tworzenie nieskończonych sekwencji za pomocą generatorów w Pythonie

Python, dzięki swojej elastycznej składni i wsparciu dla programowania funkcjonalnego, oferuje potężne narzędzie znane jako generatory. Generatory umożliwiają tworzenie nieskończonych sekwencji w efektywny sposób, dzięki czemu możemy zarządzać pamięcią dużo lepiej niż przy użyciu tradycyjnych struktur danych. W tym artykule dowiesz się, jak korzystać z generatorów w Pythonie do tworzenia nieskończonych sekwencji, jak je kontrolować oraz jak unikać pułapek związanych z ich użyciem.

Dlaczego warto używać generatorów?

Kiedy pracujesz z dużymi zestawami danych, pamięć może stać się ograniczeniem. Generatory pozwalają na generowanie elementów sekwencyjnie i na bieżąco, co oznacza, że przechowujesz w pamięci tylko jeden element na raz. Daje to ogromną oszczędność, gdy chcesz przechowywać lub przetwarzać bardzo długie sekwencje.

Jak tworzyć generatory w Pythonie?

Podstawy działania generatorów

W Pythonie możesz zdefiniować funkcję generatora, używając słowa kluczowego yield. Gdy funkcja natrafi na yield, zwraca wartość i pauzuje swe wykonanie, aż do momentu wznowienia przez kolejne wywołanie.

Python
1 2 3 4 5 6 7 8 9 10 def nieskonczona_sekwencja(): liczba = 0 while True: yield liczba liczba += 1 generator = nieskonczona_sekwencja() for i in range(10): print(next(generator))

Powyższy generator tworzy nieskończoną sekwencję liczb całkowitych, zaczynając od 0.

Użycie generatorów w praktyce

Generatory można wykorzystać do różnych zastosowań. Dla przykładu, możesz stworzyć nieskończoną sekwencję liczb parzystych:

Python
1 2 3 4 5 def generator_liczb_parzystych(): liczba = 0 while True: yield liczba liczba += 2

Zaawansowane generatory z parametrami

Generatory mogą również przyjmować parametry, co czyni je bardziej elastycznymi:

Python
1 2 3 4 5 6 7 8 9 def sekwencja_krok(krok): liczba = 0 while True: yield liczba liczba += krok generator = sekwencja_krok(3) for i in range(5): print(next(generator))

Kontrolowanie nieskończonych sekwencji

Kurs · 24 lekcje8h 14m
Kurs

Kurs Python dla początkujących — PyStart

Zacznij programować w Pythonie! Idealne dla osób bez doświadczenia. Praktyczne zadania, projekty i wsparcie społeczności.

  • 24 lekcje wideo + 80 ćwiczeń
  • Realne bazy z e-commerce
  • Społeczność i code-review
499 zł799 zł−38%
Rozpocznij naukę

Wykorzystanie islice z itertools

Aby ograniczyć przetwarzanie do części sekwencji, możemy użyć islice z modułu itertools:

Python
1 2 3 4 5 from itertools import islice generator = nieskonczona_sekwencja() for liczba in islice(generator, 10, 20): print(liczba)

Odpowiednie zarządzanie pamięcią

Pracując z generatorami, pamiętaj o tym, aby nie trzymać całych sekwencji w pamięci, gdy nie jest to konieczne.

Unikanie pułapek

Newsletter · co środę

Python co tydzień — newsletter dla programistów

Otrzymuj codzienne ćwiczenia, ciekawostki z ekosystemu Pythona i wskazówki do rozmów rekrutacyjnych.

2 312 czytelników · ⭐ 4,8

Potencjalne problemy z nieskończonością

Używając nieskończonych generatorów, łatwo można zapomnieć o ograniczeniach pamieci czy czasu obliczeń. Dlatego zawsze ustalaj jasny kontekst, w jakim będą używane, i testuj granice zastosowania.

Debugowanie generatorów

Podczas debugowania trudno może być określić aktualny stan generatora. Używaj narzędzi takich jak print w strategicznych miejscach lub specjalistycznych narzędzi do debugowania Pythona.

Podsumowanie

Generatory to potężne narzędzie do pracy z dużymi ilościami danych w sposób efektywny i z minimalnym zużyciem pamięci. Tworzenie nieskończonych sekwencji i ich kontrolowanie wymaga zrozumienia zasad działania generatorów oraz świadomości potencjalnych pułapek.

Część 7 z 14

Porównanie generatorów z innymi wzorcami projektowymi w Pythonie

druga lekcja cyklu „Asynchroniczność w Pythonie - wprowadzenie do asyncio"

Czytaj kolejny →