@dmit20141

Как решить проблему с декоратором python?

Я изучаю программирование на python и у меня в теме декоратора есть проблема в выполнении задания. Буду благодарен за помощь объяснении решения.

Задание следующее: "Напишите декоратор trace, который будет выводить информацию о вызове функции, только если переданные аргументы удовлетворяют предикату"

Ожидаемый результат:
@trace_if(lambda x, y, **kwargs: kwargs.get("integral"))
def div(x, y, integral=False):
    return x // y if integral else x / y

>>> div(4, 2)
2
>>> div(4, 2, integral=True)
div (4, 2) {'integral': True}
2


Я написал следующий код, но он не работает так как показано выше:
def trace_if(dec_arg):
    def my_decorator(func):
        def info_f(*args, **kwargs):
            if dec_arg == True:
                print(func.__name__, args, kwargs)
            return func(*args, **kwargs)
        return info_f
    return my_decorator
  • Вопрос задан
  • 142 просмотра
Решения вопроса 1
@deliro
МЭДЖИК
def trace_if(dec_arg):
    def my_decorator(func):
        def info_f(*args, **kwargs):
            if dec_arg(*args, **kwargs):
                print(func.__name__, args, kwargs)
            return func(*args, **kwargs)
        return info_f
    return my_decorator
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы