Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Вступ до декораторів | Опанування ітераторів та декораторів у Python
Концепції функціонального програмування в Python

bookВступ до декораторів

Свайпніть щоб показати меню

Note
Визначення

Декоратор у Python — це функція вищого порядку, яка приймає іншу функцію як аргумент і повертає нову функцію, що розширює або змінює поведінку оригінальної функції.

Декоратори — це ключова особливість Python, яка дозволяє змінювати або розширювати поведінку функцій чи методів без прямого редагування їхнього коду. По суті, декоратори — це функції вищого порядку: вони приймають іншу функцію як аргумент, розширюють або змінюють її поведінку та повертають нову функцію. У Python для застосування декоратора використовується символ @, за яким вказується ім'я декоратора, розміщене безпосередньо над визначенням функції.

Поширені випадки використання декораторів:

  • Логування;
  • Вимірювання часу виконання функцій;
  • Контроль доступу або перевірка дозволів;
  • Мемоізація (кешування результатів);
  • Валідація вхідних даних.

Декоратори дозволяють відокремити таку логіку від основної бізнес-логіки, що сприяє чистішому та легшому для підтримки коду. Опановуючи декоратори, ви отримуєте потужний інструмент для написання багаторазового та виразного коду на Python.

12345678910111213
def simple_decorator(func): def wrapper(*args, **kwargs): print("Before the function call") result = func(*args, **kwargs) print("After the function call") return result return wrapper @simple_decorator def greet(name): print(f"Hello, {name}!") greet("Alice")
copy

Розуміння args та kwargs у визначеннях функцій

Під час написання декораторів і обгорток часто виникає потреба обробляти функції, які приймають будь-яку кількість або тип аргументів. Python надає *args та **kwargs для цього.

  • *args збирає всі додаткові позиційні аргументи, передані у функцію, у кортеж;
  • **kwargs збирає всі додаткові іменовані аргументи у словник.

Ця гнучкість є ключовою для декораторів. Декоратор повинен мати змогу приймати та передавати всі аргументи оригінальній функції, незалежно від їх кількості та типу. Без *args та **kwargs ваш декоратор працюватиме лише з функціями з фіксованим підписом, що обмежує повторне використання.

123456789101112
def my_decorator(func): def wrapper(*args, **kwargs): print("Arguments:", args) print("Keyword arguments:", kwargs) return func(*args, **kwargs) return wrapper @my_decorator def example(a, b, greeting="Hello"): print(f"{greeting}, {a} and {b}!") example(1, 2, greeting="Hi")
copy

Такий підхід гарантує, що ваш декоратор може обгортати будь-яку функцію, роблячи код надійним і багаторазово використовуваним.

1. Яке призначення символу @ у Python?

2. Як декоратор змінює поведінку функції?

question mark

Яке призначення символу @ у Python?

Виберіть правильну відповідь

question mark

Як декоратор змінює поведінку функції?

Виберіть правильну відповідь

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 4. Розділ 1

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Секція 4. Розділ 1
some-alt