Lubię być w stanie zmierzyć wydajność funkcji Pythona kod mam, więc bardzo często zrobić coś podobnego do tego ...Dekoratorzy funkcyjne
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
Tak, wiem, że mają mierzyć wydajność z timeit , ale działa to dobrze dla moich potrzeb i pozwala mi włączać i wyłączać tę informację w celu debugowania bardzo płynnie.
Ten kod oczywiście pochodzi sprzed poznania dekoratorów funkcji ... Nie, żebym teraz wiedział o nich dużo, ale myślę, że mógłbym napisać dekorator, który wykonałby następujące czynności, używając słownika ** kwds:
some_function(arg1, arg2, ..., argN) # Does not time function
some_function(arg1, arg2, ..., argN, verbose = True) # Times function
chciałbym mimo wszystko chciał powielać uprzedniej obróbce moich funkcji, tak że obróbka będzie coś więcej takich jak:
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
myślę, że to wymagałoby dekorator policzyć liczbę argumentów, wiedzieć ile zajmie oryginalna funkcja, stri p jakikolwiek nadmiar, przekazuj odpowiednią liczbę do funkcji ... Nie jestem pewien co zrobić, aby powiedzieć Pythonie, aby to zrobić ... Czy to możliwe? Czy istnieje lepszy sposób na osiągnięcie tego samego?
ale co "some_function (arg1, arg2, ..., argN, True)" należy również uruchomić? –
Cóż, wymagałoby to innego rodzaju dekoratora. Jeden, który używa inspekcji lub pobiera dodatkową wartość liczbową wskazującą ustaloną liczbę argumentów, które przyjmuje funkcja zdobiona. – Stephan202
Dzięki za napisanie tego dla mnie Stephan! Myślałem o tym w drodze do domu z pracy i doszedłem do wniosku, że użycie argumentów słów kluczowych w tym celu jest lepszym podejściem, ponieważ pozwoli mi to uwzględnić inne parametry, takie jak to, ile razy czas funkcja i czy wydruk powinien odzwierciedlać średni czas, minimalny czas lub bardziej szczegółowe statystyki ... – Jaime