Sobes.tech
Back to questions
Junior — Middle
69

Каким образом реализовать функцию-декоратор, принимающую параметры?

Answer from AI

sobes.tech AI

Функция-декоратор с параметрами реализуется как функция, которая возвращает сам декоратор. То есть это три уровня вложенности:

  1. Внешняя функция принимает параметры декоратора.
  2. Внутренняя функция — сам декоратор, принимает функцию для обёртки.
  3. Функция-обёртка, которая заменяет исходную функцию.

Пример:

def repeat(times):
    def decorator(func):
        def wrapper(*args, **kwargs):
            for _ in range(times):
                result = func(*args, **kwargs)
            return result
        return wrapper
    return decorator

@repeat(times=3)
def say_hello():
    print("Hello")

say_hello()

В этом примере repeat — функция, принимающая параметр times. Она возвращает decorator, который принимает функцию func и возвращает wrapper, вызывающий func нужное количество раз.