Python: рекурсивная функция трассировки | Кодементор
На пути к программной инженерии я сталкиваюсь с проблемами разного рода. А еще я люблю, когда приходит время решить какую-нибудь «чисто программную» задачу. Давайте посмотрим на задание, с которым меня попросили помочь.
После часа работы я нашел решение. Позвольте мне поделиться кодом результата с комментариями:
from functools import wraps
def trace(func):
func_name = func.__name__
separator = '| '
trace.recursion_depth = 0
@wraps(func)
def traced_func(*args, **kwargs):
print(f'{separator * trace.recursion_depth}|-- {func_name}({", ".join(map(str, args))})')
trace.recursion_depth += 1
result = func(*args, **kwargs)
trace.recursion_depth -= 1
print(f'{separator * (trace.recursion_depth + 1)}|-- return {result}')
return result
return traced_func
def factorial(n):
if n == 1: return 1
else: return n * factorial(n-1)
factorial = trace(factorial)
print(factorial(7))
Хотелось бы услышать от вас об этом решении. Вам это нравится? У вас есть другие идеи, как это решить?