O. Повторюшка

Разработайте функцию get_repeater, которая принимает некую функцию func и число count.
Результатом работы get_repeater должна быть функция, которая выполняет действие func count раз.

Примечание

В решении не должно быть ничего, кроме выражения.

Пример

Ввод

repeater = get_repeater(lambda x: x + 1, 5)
print(repeater(2))

Вывод

7

Ввод

repeater = get_repeater(lambda x: x * 2, 10)
print(repeater(1))

Вывод

1024

Решение

Наша задача создать функцию, которая возвращала бы не результат, а тоже функцию, которая выполнялось бы заданное в качестве параметра первой функции раз. Звучит запутано, не правда ли?

На самом деле все не так страшно и то довольно распространенная практика в современном программировании, чью парадигму можно описать примерно так: все есть указатель на объект.

Итак, создаем функцию get_repeater(func, count) в ней сразу создаем новую функцию repeater(value), которую мы и будем возвращать из первой. Так как функция вложенная, она имеет доступ к родительским переменным. Оттуда нам потребуется count чтобы организовать циклический вызов функции func, оба значения передаются нам в качестве аргументов. А дальше все так же просто, как если бы нас попросили посчитать сумму чисел от 0 до N мы просто в цикле накапливаем результат.

Посмотреть код

Решение

Python
def get_repeater(func, count):
    def repeater(value):
        result = value
        for _ in range(count):
            result = func(result)
        return result
    return repeater