NilColor

/*Terra nullius*/

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

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 , , ,

2 Responses to 'Декоратор для замеров'

Subscribe to comments with RSS or TrackBack to 'Декоратор для замеров'.

  1. Мдаааа…. Ты окончательно решил посвятить блог профессиональным вопросам? :)

    Жаль, что не смогу воспользовацца декоратором. 8))))

    Nikolas

    14 Jan 08 at 14:40

  2. неа, не решил… просто вот именно в последние дни это было тем, что больше всего сидело в голове. Плюс это может быть кому-то еще пригодится ;)
    Но писать только об этом я пока не думал.

    ЗЫ
    Заходи, я тебя научу декораторам ;)

    NilColor

    14 Jan 08 at 15:46

Leave a Reply