#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