Archive for the ‘decorator’ tag
Декоратор для замеров
Несколько раз я слышал про декораторы. Но вот сущность их понять не мог… Ускользала она. До тех пор, пока не попробовал сделать один.
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 решило проблему. Подправленный код можно посмотреть выше.


