Co to jest domknięcie (closure) w Pythonie?

Domknięcie w Pythonie to pojęcie z programowania funkcjonalnego, które odnosi się do techniki, w której funkcja zapamiętuje swoje leksykalne środowisko, nawet gdy jest wywoływana poza swoim zakresem. Innymi słowy, domknięcie pozwala na dostęp do zmiennych z zakresu, w którym funkcja została zdefiniowana, niezależnie od miejsca, w którym jest wywoływana. Jest to możliwe dzięki mechanizmowi, który “zapamiętuje” zmienne z otaczającego zakresu funkcji.

Kompletny przykład kodu z użyciem domknięcia

Rozważmy przykład, w którym chcemy stworzyć funkcję, która generuje inną funkcję, pozwalającą na mnożenie przez zdefiniowany wcześniej mnożnik. Ten przykład ilustruje, jak możemy wykorzystać domknięcia do “zapamiętywania” wartości mnożnika.

def multiplier_factory(multiplier):
    # Funkcja zewnętrzna definiuje zmienną `multiplier`
    # i zwraca funkcję wewnętrzną
    
    def multiplier_function(number):
        # Funkcja wewnętrzna, która korzysta ze zmiennej
        # `multiplier` zdefiniowanej w funkcji zewnętrznej
        return number * multiplier
    
    return multiplier_function

# Tworzenie funkcji za pomocą domknięcia, która będzie
# mnożyć przez 5
times_five = multiplier_factory(5)

# Użycie funkcji
print(times_five(10))  # Wypisze: 50

W tym przykładzie, funkcja multiplier_factory tworzy i zwraca funkcję multiplier_function, która mnoży podaną liczbę przez wartość multiplier. Ważne jest, że multiplier_function zapamiętuje wartość zmiennej multiplier z momentu swojego utworzenia, dzięki czemu każde jej wywołanie korzysta z tej zapamiętanej wartości. Właśnie to zachowanie definiuje domknięcie.

Podsumowanie

Domknięcia w Pythonie umożliwiają tworzenie bardzo elastycznych i potężnych abstrakcji. Dzięki nim funkcje mogą nie tylko wykonywać operacje na przekazanych do nich danych, ale również pamiętać dane ze swojego otoczenia definicji, co pozwala na tworzenie bardziej złożonych konstrukcji logicznych. Domknięcia są przydatne w wielu scenariuszach programistycznych, od prostego przechowywania stanu po tworzenie dekoratorów i funkcji wyższego rzędu.

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

Scroll to Top