/
IvanKhabarov
/
python
Обзор
Документация
Войти
/
IvanKhabarov
/
python
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
Home_Task/HT_9/task3.py
66 строк
3 KB
Ivan-Khabarov
Добавлено ДЗ
01 окт 2024, 19:24
01 окт 2024, 19:24
3f16c8f
Код
Авторство
О чём код?
# Задача 3. Счётчик # Реализуйте декоратор counter, считающий и выводящий количество вызовов # декорируемой функции. # Для решения задачи нельзя использовать операторы global и nonlocal. from functools import wraps from typing import Callable, Any, Optional def counter(func: Callable) -> Callable: """ Декоратор для подсчета количества вызовов функции. :param func: Декорируемая функция. :return: Обертка функции с подсчетом вызовов. """ @wraps(func) def wrapper(*args, **kwargs) -> Any: """ Функция-обертка для увеличения и вывода счётчика вызовов функции. :param args: Позиционные аргументы декорируемой функции. :param kwargs: Именованные аргументы декорируемой функции. :return: Результат вызова декорируемой функции. """ wrapper.count += 1 # Увеличиваем счетчик вызовов на единицу. result = func(*args, **kwargs) # Вызываем оригинальную функцию. print(f"Функцию '{func.__name__}' вызвали {wrapper.count} раз") return result wrapper.count = 0 # Инициализируем счетчик вызовов. return wrapper # Возвращаем обертку. @counter def greeting(name: str, age: Optional[int] = None) -> str: """ Приветствие с возрастом и именем. :param name: Имя человека. :param age: Возраст человека (по умолчанию None). :return: Строка с приветствием. """ if age: return "Ого, {name}! Тебе уже {age} лет, ты быстро растешь!".format(name=name, age=age) else: return "Привет, {name}!".format(name=name) @counter def greeting2(name: str) -> None: """ Приветствие с именем. Вывод в консоль. :param name: Имя человека. :return: None. """ print(f'Привет, {name}!') def main() -> None: """ Основная функция для запуска. :return: None. """ greeting("Том") # Вызов функции greeting с одним аргументом. greeting("Миша", age=100) # Вызов функции greeting с двумя аргументами. greeting2("Маша") greeting(name="Катя", age=16) main() # Запуск основной функции.