@lisaskusok

Как создать декоратор, который сохраняет аргумент, с которым была вызвана функция, и результат её работы в виде списка с историей вызовов функции?

Пример: функция была вызвана два раза с аргументами 4 и 5,
история вызовов должна выглядеть так: [[4,5], [5,8]]. История вызовов должна
сохраняться как атрибут декорированной функции.
Что я делаю не так?
def zip_lst(*args):
    for i in range(min([len(i) for i in args])):
        yield list([value[i] for value in args])


def decorated_fib(func):
    def wrapper(x):
        wrapper.list.append(x)
        wrapper.results.append(func(x))
        return func(x)

    wrapper.count = 0
    wrapper.list = []
    wrapper.results = []
    for i in zip_lst(wrapper.list, wrapper.results):
        wrapper.history = zip_lst(wrapper.count, wrapper.results)
    return wrapper

@decorated_fib
def fibonacci(n):
    assert n >= 0
    if n <= 2:
        return n
    else:
        return fibonacci(n - 1) + fibonacci(n - 2)
  • Вопрос задан
  • 43 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы