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

bookЛанцюжкове та стекове використання декораторів

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

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

У наведеному нижче прикладі визначено два декоратори: decorator_one та decorator_two, які стекуються над функцією greet. Порядок стекування визначає, як застосовуються декоратори.

123456789101112131415161718192021222324252627
# Prints messages before and after the function call def decorator_one(func): def wrapper(*args, **kwargs): print("Decorator One: Before") result = func(*args, **kwargs) print("Decorator One: After") return result return wrapper # Also prints messages before and after the function call def decorator_two(func): def wrapper(*args, **kwargs): print("Decorator Two: Before") result = func(*args, **kwargs) print("Decorator Two: After") return result return wrapper # Stacking decorators # decorator_two is applied first (innermost), # then decorator_one wraps the result (outermost) @decorator_one @decorator_two def greet(name): print(f"Hello, {name}!") greet("Alice")
copy
Note
Примітка

Зверніть увагу, що спочатку до decorator_two застосовується greet, а потім результат обгортається decorator_one. Це означає, що декоратор, який знаходиться найближче до функції, є найвнутрішнішим, а найверхніший — найзовнішнішим. Порядок накладання декораторів має значення, оскільки він впливає на поведінку декорованої функції.

question mark

У якому порядку застосовуються складені декоратори в Python?

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

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

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

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

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

Запитати АІ

expand

Запитати АІ

ChatGPT

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

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