Jeśli dopiero zaczynasz swoją przygodę z Pythonem, prawdopodobnie spotkałeś się już z funkcjami, które zwracają wartości za pomocą return. Ale co jeśli powiem Ci, że istnieje sposób, by funkcja zwracała wiele wartości, ale nie wszystkie naraz, tylko po trochu i wtedy kiedy będą potrzebne? Brzmi sprytnie, prawda?
Właśnie do tego służy słowo kluczowe yield w Pythonie.
W tym artykule wytłumaczę Ci:
- czy i dlaczego yield może uratować Twój program przed zjedzeniem całej pamięci RAM 😅
- co to jest yield w Pythonie,
- czym różni się od return,
- jak działają generatory.
Co to jest yield w Pythonie?
W skrócie: yield to sposób na tworzenie funkcji, które nie zwracają tylko jednej wartości, ale całe strumienie danych.
Kiedy w funkcji używasz yield, to nie zwracasz jednej wartości i kończysz działanie (jak return), tylko pauzujesz działanie funkcji i zapamiętujesz jej stan. Dzięki temu, gdy wywołasz ją ponownie to kontynuuje pracę tam, gdzie się zatrzymała.
To tak, jakbyś miał książkę i zakładkę i yield zostawia zakładkę w miejscu, w którym skończył.
yield vs return
| return | yield |
|---|---|
| Zwraca wartość i kończy funkcję | Zwraca wartość i pauzuje funkcję |
| Funkcja działa tylko raz | Funkcja działa tyle razy, ile razy po nią sięgniemy |
| Zwraca pojedynczy obiekt | Zwraca generator (czyli sekwencję) |
Klasyczne return w Pythonie
Do wszystkich przykładów w pythonie, wykorzystaj darmowy kompilator python https://www.onlineide.pro/playground/python. Dzięki temu możesz wypróbować jak faktycznie działa Twój kod. Poniżej klasycznie return w pythonie:
def liczby_do_5():
return [1, 2, 3, 4, 5]
for liczba in liczby_do_5():
print(liczba)Tutaj funkcja zwraca od razu całą listę, a to oznacza, że jeśli lista miałaby milion liczb, musiałaby być w całości przechowywana w pamięci.
Teraz to samo, ale z yield
def liczby_do_5():
for i in range(1, 6):
yield i
for liczba in liczby_do_5():
print(liczba)Tutaj yield zwraca po jednej liczbie, za każdym razem gdy pętla for jej potrzebuje. To oznacza, że pamięć jest zużywana tylko dla jednej liczby na raz.
A co to jest generator?
Funkcja, która używa yield, zwraca obiekt generatora.
Generator to taki specjalny obiekt, który można iterować (czyli przechodzić po nim jak po liście), ale nie trzyma wszystkich danych naraz w pamięci. To działa na zasadzie “podaj, kiedy poproszę”.
gen = liczby_do_5() print(next(gen)) # 1 print(next(gen)) # 2 print(next(gen)) # 3
Funkcja się zatrzymuje po każdym yield, a next() ją “budzi”, żeby dała następną wartość.
Kiedy używać yield?
yield to potężne narzędzie, które sprawdza się najlepiej, gdy:
- masz do czynienia z dużą ilością danych (np. przetwarzasz miliony rekordów),
- nie chcesz ładować wszystkiego naraz do pamięci,
- potrzebujesz funkcji, która działa jak strumień danych,
- chcesz pisać kod bardziej “leniwy” (czyli uruchamiany tylko wtedy, gdy trzeba).
Generator plików z logami
def czytaj_linie_z_pliku(nazwa_pliku):
with open(nazwa_pliku) as f:
for linia in f:
yield linia.strip()
for linia in czytaj_linie_z_pliku("logi.txt"):
print(linia)Wyobraź sobie plik z milionem linii, ta funkcja czyta je po jednej, a nie wszystkie naraz. To ogromna różnica w zużyciu RAM-u!
Podsumowanie
yield to sposób na tworzenie generatorów, funkcji, które zwracają dane krok po kroku.
🔹 Idealne do pracy z dużą ilością danych.
🔹 Pomaga pisać wydajniejszy i bardziej zwięzły kod.
🔹 Używaj yield, gdy chcesz oszczędzać pamięć i działać “leniwo”.
Jeśli uczysz się Pythona i chcesz pisać bardziej efektywny kod to yield jest jednym z tych słów kluczowych, które warto mieć w swoim arsenale.
Masz pytania? Daj znać w komentarzu!
A jeśli chcesz więcej takich prostych wyjaśnień, zapisz się do newslettera 🚀

Nikt jeszcze nie komentował. Bądź pierwszy!