возврат значений из оформленных функций в python

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

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

Вопрос:

У меня есть следующая оформленная функция:

 import time
def logging_time(func):
    """Decorator that logs time"""
    def logger():
        """Function that logs time"""
        start = time.time()
        func()
        print(f"Calling {func.__name__}: {time.time() - start:.5f}")

    return logger
     
@logging_time
def calculate_sum():
     return sum(range(10000))
  

Когда я запускаю calculate_sum() , я получаю Calling calculate_sum: 0.00043 , что является результатом @logging_time .

Как я могу также получить return значение calculate_sum функции? Почему sum(range(10000)) также не возвращается?

Ответ №1:

Просто сохраните результат, в котором вы вызываете функцию, и верните его

 import time
def logging_time(func):
    """Decorator that logs time"""
    def logger():
        """Function that logs time"""
        start = time.time()
        result = func()  # save result here
        print(f"Calling {func.__name__}: {time.time() - start:.5f}")
        return result  # return it here

    return logger
     
@logging_time
def calculate_sum():
     return sum(range(10000))
  

Ответ №2:

просто сохраните возвращаемое значение и верните его

 import time
def logging_time(func):
    """Decorator that logs time"""
    def logger():
        """Function that logs time"""
        start = time.time()
        result = func()
        print(f"Calling {func.__name__}: {time.time() - start:.5f}")
        return result
    return logger
     
@logging_time
def calculate_sum():
     return sum(range(10000))

print(calculate_sum())
  

Результат:

 Calling calculate_sum: 0.00012
49995000