Jakie jest zastosowanie słowa kluczowego “yield” w Pythonie?

Słowo kluczowe yield w Pythonie jest używane w definicji funkcji generującej. Pozwala ono funkcji zwracać generator, który może być iterowany, aby uzyskać serię wartości. W przeciwieństwie do tradycyjnych funkcji, które zwracają cały zestaw danych naraz, funkcje z yield zwracają dane jeden element na raz, co pozwala na efektywniejsze zarządzanie pamięcią i opóźnione generowanie wyników.

Przykład kodu z wyjaśnieniami

Poniższy przykład ilustruje różnicę między funkcją generującą z użyciem yield a tradycyjną funkcją zwracającą listę.

# Funkcja generująca liczby parzyste do podanej granicy
def generate_even_numbers(limit):
    number = 0
    while number < limit:
        yield number  # Zwraca bieżącą liczbę parzystą i wstrzymuje wykonanie
        number += 2

# Użycie funkcji generującej
for even_number in generate_even_numbers(10):
    print(even_number)  # Wyświetla liczby parzyste od 0 do 8

# Tradycyjna funkcja zwracająca listę liczb parzystych
def get_even_numbers_list(limit):
    numbers = []
    for number in range(0, limit, 2):
        numbers.append(number)  # Dodaje liczbę parzystą do listy
    return numbers

# Użycie tradycyjnej funkcji
even_numbers = get_even_numbers_list(10)
print(even_numbers)  # Wyświetla listę liczb parzystych od 0 do 8

W powyższym przykładzie, funkcja generate_even_numbers używa yield do zwracania kolejnych liczb parzystych, jedna za drugą. Dzięki temu, nawet dla bardzo dużych limitów, zużycie pamięci pozostaje niewielkie, ponieważ w każdym momencie istnieje tylko jedna wartość generowana przez funkcję.

Z kolei funkcja get_even_numbers_list zwraca pełną listę liczb parzystych, co przy dużych limitach może prowadzić do znacznego zużycia pamięci.

Podsumowanie

Słowo kluczowe yield w Pythonie jest potężnym narzędziem do tworzenia funkcji generujących, które pozwalają na efektywne przetwarzanie danych z minimalnym wykorzystaniem pamięci. Jest szczególnie przydatne w przypadkach, gdy potrzebujemy przetwarzać duże zbiory danych, lub gdy chcemy otrzymywać dane sukcesywnie, bez konieczności ładowania całego zbioru do pamięci naraz.

Jeżeli chcesz przyśpieszyć swoją naukę tworzenia stron chciałbym polecić mój kurs Python od podstaw w którym nauczysz się tego języka od podstaw do zaawansowanych jego aspektów.

Scroll to Top