Задача 04A. Декораторы

Входной файл:Стандартный вход   Ограничение времени:1 сек
Выходной файл:Стандартный выход   Ограничение памяти:512 Мб
Максимальный балл:1  

Условие

Требуется реализовать на языке Python функции-декораторы.

Декоратор counter_decorator возвращает функцию, печатающую в консоль количество вызовов Function calls count: {n} и возвращающую результат декорируемой функцию от переданных аргументов.

Декоратор projection_decorator возвращает функцию 3-х аргументов x, y, z, которая возвращает результат декорируемой функции от аргумента 3x − 7y + 15z + 18.


from typing import Callable

def counter_decorator(f: Callable) -> Callable:
    '''Decorates `f` to print number of calls each call.'''
    pass

def projection_decorator(f: Callable[[int], None]) -> Callable[[int, int, int], None]:
    '''Decorates `f` as a function of three arguments x, y, z that calls `f` with a single argument $3x-7y+15z+18$'''
    pass

Формат выходных данных

Код решения должен содержать только импортируемые модули, определение и реализацию функций.

Примеры тестов

Стандартный вход Стандартный выход
1 def sum(a: int, b: int): print(a + b) fn = counter_decorator(sum) fn(1, 2) fn(4, 5) fn(-4, 5)
Function calls count: 1
3
Function calls count: 2
9
Function calls count: 3
1
2 @projection_decorator def calc(x: int): print(x * x) calc(1, 2, 3)
2704

0.116s 0.018s 13