Domknięcie w Pythonie to technika programowania, która pozwala na przechowywanie wartości pomimo zakończenia działania otaczającej funkcji, w której te wartości zostały utworzone. Domknięcia umożliwiają “zapamiętywanie” stanu — przechowują wartości zmiennych, dzięki czemu można je wykorzystać później, nawet po zakończeniu życia zmiennej w swoim zakresie. To potężne narzędzie w programowaniu funkcjonalnym, które pozwala na większą elastyczność i wykorzystanie funkcji wyższego rzędu.
Przykład kodu z wyjaśnieniami
Poniższy przykład ilustruje, jak można stworzyć i wykorzystać domknięcie w Pythonie:
# Definicja funkcji zewnętrznej, która tworzy domknięcie
def zewnetrzna_funkcja(x):
# Zmienna lokalna, która będzie "pamiętana" przez domknięcie
zmienna_zewnetrzna = x
# Definicja funkcji wewnętrznej, korzystającej ze zmiennej
# z funkcji zewnętrznej
def wewnetrzna_funkcja(y):
# Użycie zmiennej z zewnętrznej funkcji
return zmienna_zewnetrzna + y
# Zwracanie funkcji wewnętrznej jako wartości
return wewnetrzna_funkcja
# Utworzenie domknięcia przechowującego wartość zmienna_zewnetrzna
moje_domkniecie = zewnetrzna_funkcja(10)
# Wywołanie funkcji wewnętrznej z domknięcia z nowym argumentem
print(moje_domkniecie(5)) # Wynik: 15
Wyjaśnienie
- Funkcja
zewnetrzna_funkcja(x)
przyjmuje argumentx
i tworzy zmiennązmienna_zewnetrzna
, która jest jej lokalna. - Wewnątrz
zewnetrzna_funkcja
, definiowana jest funkcja wewnętrznawewnetrzna_funkcja(y)
korzystająca zzmienna_zewnetrzna
. Dostęp do tej zmiennej jest możliwy, pomimo żewewnetrzna_funkcja
zostanie wywołana poza swoim leksykalnym zakresem. zewnetrzna_funkcja
zwracawewnetrzna_funkcja
bez jej wywoływania — zwraca samą funkcję, a nie jej wynik.- Gdy
zewnetrzna_funkcja
jest wywoływana, tworzy domknięcie, czyli instancjęwewnetrzna_funkcja
wraz z otoczeniem, które “pamięta” wartośćzmienna_zewnetrzna
. - Wywołując
moje_domkniecie(5)
, używamy tej “zapamiętanej” wartości, dodając ją do nowego argumentuy
.
Podsumowanie
Domknięcia w Pythonie pozwalają funkcjom wewnętrznym na dostęp do zmiennych zdefiniowanych w funkcjach zewnętrznych, nawet po ich wykonaniu. To mocne narzędzie umożliwia tworzenie bardziej modularnego i wyrafinowanego kodu, szczególnie w programowaniu funkcjonalnym i dekoratorach.
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.