NilColor

/*Terra nullius*/

Archive for the ‘debug’ tag

Декоратор для замеров

with 2 comments

Несколько раз я слышал про декораторы. Но вот сущность их понять не мог… Ускользала она. До тех пор, пока не попробовал сделать один.

def execute_timing(func):
    """Функция-декоратор для замеров времени исполнения
    Пример использования:
    @execute_timing
    def getSomeData(params):
        ...
    Теперь, при вызове getSomeData в консоль будет выводиться
    время ее выполнения. Убрав декоратор - убираем и замер."""
    def wrapper(*arg, **kwargs):
        t1 = time.time()
        res = func(*arg, **kwargs)
        t2 = time.time()
        print '%s done in %0.3f ms' % (func.func_name, (t2-t1)*1000)
        return res
    return wrapper

Осталось еще только попробовать воспользоваться декоратором для расширения уже написанных функций и будет совсем понятно. Хотя уже и сейчас я их понял достаточно, что-бы иногда использовать.

добавлено:
как оказалось, декоратор хорош, но не всегда :) после небольшой правки он заработал уже везде (где я его использую). Проблема заключилась в том, что wrapper(), вернее оборачиваемая им функция, недополучал аргументов. Добавление **kwargs решило проблему. Подправленный код можно посмотреть выше.

Written by NilColor

January 14th, 2008 at 11:58 am

Posted in phyton

Tagged with , , ,