Dekoratory w Pythonie to potężne narzędzie, które pozwala modyfikować zachowanie funkcji lub metod bez zmiany ich kodu źródłowego. Są to funkcje, które przyjmują inną funkcję jako argument i zwracają nową funkcję, dodając do niej pewne funkcjonalności. Dekoratory znajdują szerokie zastosowanie w programowaniu, od rejestrowania i mierzenia czasu wykonania, przez ustawianie warunków dostępu, po cachowanie wyników. W tym artykule omówimy zalety użycia dekoratorów i pokażemy, jak mogą one ułatwić i uporządkować kod.
Kompletny przykład kodu z użyciem dekoratorów
Rozważmy przykład dekoratora, który mierzy czas wykonania dowolnej funkcji. Jest to przydatne, gdy chcemy zrozumieć, jak długo działają poszczególne części naszego programu, szczególnie w kontekście optymalizacji wydajności.
import time
# Dekorator do mierzenia czasu wykonania funkcji
def timer(func):
# Funkcja opakowująca, która dodaje nową funkcjonalność
def wrapper(*args, **kwargs):
start_time = time.time() # Zapisanie czasu startu
result = func(*args, **kwargs) # Wywołanie oryginalnej funkcji
end_time = time.time() # Zapisanie czasu końca
print(f"Czas wykonania {func.__name__}: {end_time - start_time:.5f} sek.")
return result
return wrapper
# Przykładowa funkcja, która zostanie opakowana
@timer # Użycie dekoratora
def example_function(n):
"""Funkcja zwracająca sumę kwadratów od 1 do n"""
return sum(i**2 for i in range(1, n + 1))
# Wywołanie funkcji z dekoratorem
print(example_function(10000))
W powyższym kodzie dekorator timer
dodaje funkcjonalność mierzenia czasu do każdej funkcji, do której jest stosowany, bez konieczności modyfikowania jej kodu źródłowego. To pokazuje, jak dekoratory mogą być używane do rozszerzania i modyfikowania zachowania funkcji w sposób czysty i ponownie używalny.
Zalety użycia dekoratorów:
- Modularność i ponowne użycie kodu: Dekoratory pozwalają na wyodrębnienie wspólnej funkcjonalności do osobnych funkcji, które można łatwo zastosować do wielu innych funkcji.
- Czystość kodu: Użycie dekoratorów pomaga utrzymać kod źródłowy funkcji czystym i skupionym na jej głównym zadaniu, przenosząc dodatkowe funkcjonalności do dekoratorów.
- Łatwość w debugowaniu i utrzymaniu kodu: Dzięki odseparowaniu logiki pomocniczej, dekoratory ułatwiają debugowanie i utrzymanie kodu.
- Elastyczność w rozszerzaniu funkcji: Dekoratory umożliwiają dodawanie nowych funkcji bez zmiany istniejącego kodu, co jest kluczowe w utrzymaniu czystości kodu i zapewnieniu jego łatwej rozbudowy.
Podsumowanie
Dekoratory w Pythonie oferują elegancką metodę modyfikacji i rozszerzania zachowania funkcji i metod, zachowując przy tym ich kod czystym i niezmienionym.
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.