Вы можете создать файлоподобный объект, у которого есть метод write()
, который ничего не делает, и заставить ваш декоратор заменить его на sys.stdout
(и восстановить исходный стандартный вывод после вызова функции).
import sys
class NoOutput:
def write(text):
pass
no_output = NoOutput()
def timing_decorator(function):
def wrapper(*args, **kwargs):
callable_f = partial(function, *args, **kwargs)
old_stdout, sys.stdout = sys.stdout, no_output
try:
total = Timer(callable_f).timeit(1)
finally:
sys.stdout = old_stdout
print(f"{function.__name__}: {total:.5f}ms")
return total
return wrapper
Обратите внимание на использование try
/ finally
, чтобы убедиться, что стандартный вывод восстанавливается, даже если в функции возбуждено исключение.