J'aime être en mesure de mesurer la performance des fonctions de python I de code, donc très souvent que je fais quelque chose de similaire à ce ...Fonction Décorateurs
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
Oui, je sais que vous êtes censé mesurer la performance avec timeit , mais cela fonctionne très bien pour mes besoins, et me permet d'activer et de désactiver ces informations pour le débogage très facilement.
Ce code de cours a été d'avant, je connaissais les décorateurs de fonction ... Pas que je sache beaucoup sur eux, mais je pense que je pourrais écrire un décorateur qui a fait ce qui suit, en utilisant le ** dictionnaire de kwds:
some_function(arg1, arg2, ..., argN) # Does not time function
some_function(arg1, arg2, ..., argN, verbose = True) # Times function
Je voudrais néanmoins dupliquer le travail avant de mes fonctions, de sorte que le travail serait quelque chose comme:
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
Je suppose que cela nécessiterait le décorateur de compter le nombre d'arguments, savoir combien la fonction originale prendra, stri P en excès, passez le bon nombre d'entre eux à la fonction ... Je ne sais pas encore comment dire à Python de le faire ... Est-ce possible? Y a-t-il un meilleur moyen d'atteindre la même chose?
mais ce "une_fonction (arg1, arg2, ..., argN, True)" doit également exécuter? –
Eh bien, cela nécessiterait un autre type de décorateur. Celui qui utilise inspecter ou prend une valeur numérique supplémentaire indiquant le nombre fixe d'arguments que prend la fonction décorée. – Stephan202
Merci de l'avoir écrit pour moi Stephan! J'y pensais en rentrant du travail, et j'en suis arrivé à la conclusion que l'utilisation d'arguments par mot clé pour cela est une meilleure approche, car elle me permettra d'inclure d'autres paramètres, comme le nombre de fois où la fonction et si l'impression doit refléter le temps moyen, le temps minimum ou des statistiques plus détaillées ... – Jaime