@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

Ошибка одна на первый и второй коды
  • Вопрос задан
  • 105 просмотров
Решения вопроса 1
shurshur
@shurshur
Сисадмин, просто сисадмин...
*args в приведённом коде это аргументы самого декоратора. А аргументы функции надо описывать в wrapper.

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

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

Войти через центр авторизации
Похожие вопросы