Задать вопрос
@oneLEAM

Почему декоратор не работает с функциями которые принимаю переменные?

Вот код который считает время работы функций:
from time import time

def operating_time(func):
    def wrapper():
        t1 = time()
        func()
        t2 = time()-t1
        print(f'{func.__name__} ran in\n{t2} seconds')
    return wrapper

Он работает с функциями которые не принимают переменные, а которые принимают - нет.
Моя попытка сделать чтобы он заработал с такими функциями:
from time import time

def operating_time(func, *args):
    def wrapper():
        t1 = time()
        func(*args)
        t2 = time()-t1
        print(f'{func.__name__} ran in\n{t2} seconds')
    return wrapper

Код ошибки:
TypeError: operating_time.<locals>.wrapper() takes 0 positional arguments but 1 was given

Ошибка одна на первый и второй коды
  • Вопрос задан
  • 160 просмотров
Подписаться 1 Простой 5 комментариев
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Python-разработчик
    10 месяцев
    Далее
  • Skillfactory
    Профессия Python-разработчик
    9 месяцев
    Далее
  • Хекслет
    Python-разработчик
    10 месяцев
    Далее
  • SF Education
    Бэкенд-разработчик на Python
    3 месяца
    Далее
  • Stepik
    Программа курсов: Бэкенд-разработка на Python
    1 месяц
    Далее
  • Merion Academy
    Python программист с нуля
    4 месяца
    Далее
  • Skypro
    Python-разработчик с нуля
    9 месяцев
    Далее
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
Решения вопроса 1
shurshur
@shurshur
Сисадмин, просто сисадмин...
*args в приведённом коде это аргументы самого декоратора. А аргументы функции надо описывать в wrapper.

Сама суть декоратора в том, что вместо исходной функции получается другая функция wrapper.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Hivemaster
@Hivemaster
Админ, который хочет программировать
Потому что программист ни учебник, ни документацию не читал.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы