python decorator не возвращает значение функции

#python #python-3.x #python-decorators

#python #python-3.x #python-декораторы

Вопрос:

Я начинаю с декораторов, поэтому я попробовал базовый пример декоратора отладки, где он печатает имя функции, входные аргументы и выходное значение. Ниже приведен мой отладочный декоратор.

 def debug(func):
    @functools.wraps(func)
    def wrapper_debug(*args, **kwargs):
        args_repr = [repr(a) for a in args]                     
        kwargs_repr = [f"{k}={v!r}" for k, v in kwargs.items()]  
        signature = ", ".join(args_repr   kwargs_repr)           
        print(f"Calling {func.__name__}({signature})")
        value = func(*args, **kwargs)
        print(f"{func.__name__!r} returned {value!r}")           
        return value
    return wrapper_debug
  

Получение факториала каждого числа и конечной суммы всех этих факториалов, которые я хотел. Не удается получить сумму факториалов. т.е. декоратор отладки не возвращает исходное значение функции.

 from decorator import debug
import math

math.factorial = debug(math.factorial)

def approximate_e(terms=18):
    return sum(1 / math.factorial(n) for n in range(terms))

approximate_e(5)
  

Это результат, который я получаю при запуске кода

 Calling factorial(0)
'factorial' returned 1
Calling factorial(1)
'factorial' returned 1
Calling factorial(2)
'factorial' returned 2
Calling factorial(3)
'factorial' returned 6
Calling factorial(4)
'factorial' returned 24
  

Ожидаемый результат:

 Calling factorial(0)
'factorial' returned 1
Calling factorial(1)
'factorial' returned 1
Calling factorial(2)
'factorial' returned 2
Calling factorial(3)
'factorial' returned 6
Calling factorial(4)
'factorial' returned 24
2.708333333333333
  

Ответ №1:

Он возвращает значение, но вы не печатаете его после вызова…

Сделайте это:

 print(approximate_e(5))
  

Комментарии:

1. Вероятно, это должен быть комментарий, а затем проголосуйте за закрытие как за опечатку.