Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.09.2023, 16:27   #1
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию Декоратор, для получения n количества запуска функции

Добрый день. По сути задача - декоратор с параметром. Это сделано. Но вот не могу собразить как получить timestamps_list в get для того, чтобы выбрать n элементов из этого списка. И вообще по принтам выводится все для get, потом все для wrapper, а потом уже функция несколько раз (если в цикле). То есть как бы нет вложенности в этой структуре. Пробовал через nonlocal, но переменная не изменяется. Нужна пояснительная бригада, как такое можно сделать.
Код:
def get(n):

    def wrapper(func):
        def inner(*args, **kwargs):
            ts_before = time.time()
            result = func(*args, **kwargs)
            ts_after = time.time()
            inner.timestamps_list.append(ts_after - ts_before)
            return result

        inner.timestamps_list = []
        return inner

    return wrapper
Arkuz вне форума Ответить с цитированием
Старый 24.09.2023, 22:49   #2
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

Что-то такое получилось:
Код:
def mean(k):
    def decorator(func):
        times = []

        def wrapper(*args, **kwargs):
            ts_before = time.time()
            result = func(*args, **kwargs)
            ts_after = time.time()
            times.append(ts_after - ts_before)
            if len(times) > k:
                times.pop(0)
            average = sum(times) / len(times)
            print(f'Average = {average}')
            return result

        return wrapper

    return decorator
Arkuz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
IdFTP : Ошибка получения количества файлов Gdasar C++ Builder 2 05.09.2016 00:27
Приостановить работу функции до получения данных TRIZER Общие вопросы Delphi 4 14.05.2010 09:09
Функции для получения номера и названия колонок motorway PHP 4 21.07.2009 23:17
Delphi. Программа, которая использует системные функции для получения информации о файловой системе metamfetamin Помощь студентам 16 08.11.2007 13:24