Мне нравится иметь возможность измерять производительность кодируемых мной функций python, поэтому очень часто я делаю что-то похожее на это ...
import time
def some_function(arg1, arg2, ..., argN, verbose = True) :
t = time.clock() # works best in Windows
# t = time.time() # apparently works better in Linux
# Function code goes here
t = time.clock() - t
if verbose :
print "some_function executed in",t,"sec."
return return_val
Да, я знаю, что вы должны измерять производительность по времени, но это отлично работает для моих нужд и позволяет мне включать и выключать эту информацию для отладки очень плавно.
Этот код, конечно, был до того, как я узнал о декораторах функций ... Не то чтобы я знал о них сейчас много, но я думаю, что мог бы написать декоратор, который делал следующее, используя словарь ** kwds:
some_function(arg1, arg2, ..., argN) # Does not time function
some_function(arg1, arg2, ..., argN, verbose = True) # Times function
Тем не менее, я хотел бы продублировать предыдущую работу моих функций, чтобы работа была похожа на:
some_function(arg1, arg2, ..., argN) # Does not time function
some_function(arg1, arg2, ..., argN, False) # Does not time function
some_function(arg1, arg2, ..., argN, True) # Times function
Полагаю, это потребует от декоратора подсчета количества аргументов, определения количества исходной функции, удаления лишних, передачи правильного числа в функцию ... Хотя я не уверен, как сказать Python сделать это ... Это возможно? Есть ли лучший способ добиться того же?