Зміст курсу
Середній Рівень Python: Аргументи, Генератори та Декоратори
Середній Рівень Python: Аргументи, Генератори та Декоратори
Практичні Приклади Використання Декоратора
Декоратори у Python є потужним інструментом для зміни поведінки функцій або методів. Найпоширеніші способи використання - це сплячий режим, перевірка часу та ведення журналу.
1. Сплячий декоратор
Цей декоратор змушує функцію чекати певний час перед виконанням.
import time def sleep_decorator(seconds): def decorator(func): def wrapper(*args, **kwargs): print(f"Sleeping for {seconds} seconds before executing '{func.__name__}'") time.sleep(seconds) return func(*args, **kwargs) return wrapper return decorator @sleep_decorator(2) def my_function(): print("Function executed!") # Usage my_function()
2. Декоратор перевірки
Цей декоратор перевіряє, чи відповідають вхідні дані функції певним критеріям.
def validate_decorator(func): def wrapper(number): if not isinstance(number, int) or number < 0: raise ValueError("Input must be a non-negative integer") return func(number) return wrapper @validate_decorator def factorial(n): if n == 0: return 1 else: return n * factorial(n - 1) # Usage print(factorial(5)) # factorial(-1) # This will raise an error
3. Декоратор часу
Цей декоратор вимірює час виконання функції. Ми вже використовували його у попередньому розділі.
import time def timing_decorator(func): def wrapper(*args, **kwargs): start_time = time.time() result = func(*args, **kwargs) end_time = time.time() print(f"'{func.__name__}' executed in {end_time - start_time} seconds") return result return wrapper @timing_decorator def some_function(): time.sleep(1) # Simulating a task print("Function completed") # Usage some_function()
Декоратор для перевірки входу використовує додаткові бібліотеки і застосовується при розробці сайтів, тому доречніше розглядати цей декоратор в контексті створення сайтів.
Як ми вже говорили, декоратори є складною темою в Python і іноді вимагають більше практики для повного розуміння цієї теми. Ви на правильному шляху у формуванні мислення програміста.
Дякуємо за ваш відгук!