0
0 комментариев

Привет!

Мне нужно передать простой аргумент(строку) в декоратор. Не понимаю, как это сделать.

def timing(function):
    @functools.wraps(function)
    def wrapper(*args, **kwargs):
        time_start = timer()
        ret = function(*args, **kwargs)
        spent_time = round(timer() - time_start, 5)
 
        return ret, spent_time
    return wrapper

Пытался так:

def timing(function, string=''):
    @functools.wraps(function)
    def wrapper(*args, **kwargs):
        time_start = timer()
        ret = function(*args, **kwargs)
        spent_time = round(timer() - time_start, 5)
        print string
        return ret, spent_time
    return wrapper

И вызывать так:

 @timing(string='getting statement')
    def check_statement(self):
        if bool(self.state):
            return

Вылетает с ошибкой:

@timing(message='')
TypeError: timing() takes exactly 2 arguments (1 given)

Пытался завернуть в еще один декоратор:

def timing(function, message):
    def clock(message):
        @functools.wraps(function)
        def wrapper(*args, **kwargs):
            time_start = timer()
            ret = function(*args, **kwargs)
            spent_time = round(timer() - time_start, 5)
 
        return wrapper# ret, spent_time
    return clock

Traceback:

    @timing(message='')
TypeError: timing() takes exactly 2 arguments (1 given)

Помогите пожалуйста сделать правильно

Изменен статус публикации
Добавить комментарий