10.5.1 La Classe Stats

Les objets de la classe Stats ont les méthodes suivantes:

Statsstrip_dirs()
Cette méthode pour la classe Stats retire toutes les informations de début du chemin des en-tëtes de noms de fichiers. C'est trés utile pour réduire la taille des sorties pour les ajuster (à peu prés) aux 80 colonnes. Cette méthode modifie l'objet et l'information retirée est perdue. Aprés avoir réalisé une opération de nettoyage, on considère que l'objet a ses données dans un ordre ``aléatoire'' , comme il était juste aprés son initialisation et son chargement. Si strip_dirs() entraine que deux noms de fonction ne peuvent plus ëtre distingués (c.-à-d., ils sont sur la mëme ligne du mëme nom de fichier, et ont le mëme nom de fonction ) alors les statistiques relatives à ces deux données sont cumulées en une seule donnée.

Statsadd(nomdefichier[, ...])
Cette méthode de la classe Stats cumule des informations de profilage additionnelles dans l'objet de profilage courant. Ses arguments devront faire référence à des nom de fichiers créés par la version correspondante de profile.run(). Les statistiques pour des fonctions de noms identiques (c.-à-d.: fichier, ligne, nom (file,line,name)) sont automatiquement cumulées dans une seule fonction statistique.

Statssort_stats(clé[, ...])
Cette méthode modifie l'objet Stats en triant ses données suivant le critère fourni. L'argument est normalement une chaîne de caractères identifiant la clé de base d'un tri (exemple: 'time' ou 'name'). Quand on fournit plus d'une clé, alors les clés additionnelles sont utilisées comme second critère de choix quand il y a égalité dans toutes les clés sélectionnées avant elles. Par exemple, "sort_stats('name', 'file')" effectuera le tri de toutes les données suivant leurs noms de fonctions et résoud les cas d'égalité ( noms de fonctions identiques) en triant par noms de fichiers.

On peut utiliser des abbréviation pour tout nom de clé tant que l'abbréviation n'est pas ambigüe. Les clés couramment définies sont les suivantes:

Arg Valide Signification 
'calls'nombre d'appels
'cumulative'temps cumulé
'file'nom de fichier
'module'nom de fichier
'pcalls'nombre d'appels primitifs
'line'nombre de lignes
'name'nom de fonction
'nfl'name/file/line
'stdname'nom standard
'time'temps interne

On notera que tous les tris sur les statistiques sont en ordre décroissant (en placant les éléments qui consomment le plus de temps en tëte), tandis que les tris sur les noms, les fichiers et les nombres de lignes sont par ordre croissant (c.-à-.d , alphabétique). La subtile distinction entre 'nfl' and 'stdname' est que 'stdname' est un tri des noms comme ils seront imprimés, ce qui signifie que les nombres de lignes incluses seront comparés d'une manière bizarre. Par exemple, les lignes 3, 20, et 40 (si les noms de fichiers étaient les mëmes ) apparaîtraient dans l'ordre des chaînes de caractères '20', '3' et '40'. Par contre 'nfl' réalise une comparaison numérique des nombres de lignes. En fait, sort_stats('nfl') est la mëme chose que sort_stats('name', 'file', 'line').

Pour des raisons de compatibilité avec l'ancien profileur, les arguments numériques -1, 0, 1, et 2 sont permis. Ils seront interprétés respectivement comme 'stdname', 'calls', 'time', et 'cumulative'. Si l'ancien style de format (numérique) est mis en oeuvre, on ne doit utiliser qu'une seule clé de tri (la clé numérique) et les arguments supplémentaires seront ignorés sans perturbations.

Statsreverse_order()
Cette méthode de la classe Stats inverse l'ordre de la liste de base dans l'objet. Cette méthode est fournie principalement pour des raisons de compatibilité avec l'ancien profileur. On peut se poser la question de son utilité maintenant que tri, croissant vs décroissant, peut ëtre exactement sélectionné en se basant sur la clé de tri.

Statsprint_stats(restriction[, ...])

Cette méthode de la classe Stats imprime le rapport comme décrit dans la définition de profile.run() .

L'ordre de l'impression est basé sur la dernière opération sort_stats() effectuée sur l'objet (sous réserve des appels à add() et strip_dirs()).

Les arguments fournis (s'il y en a) peuvent ëtre utilisés pour limiter la liste aux données significatives. Au départ, la liste comprend l'ensemble complet des fonctions profilées. Chaque restriction est soit un nombre entier (pour selectionner un nombre de lignes), ou une fraction décimale entre 0.0 et 1.0 inclus (pour sélectionner un pourcentage de lignes), ou une expression régulière (pour co"ncider avec le nom standard qui est imprimé; comme pour Python 1.5b1, ceci utilise la syntaxe des expressions régulières dans le style Perl définie par le module re ). Si on fournit plusieurs restrictions, elles sont alors appliquées séquentiellement. Par exemple:

print_stats(.1, 'foo:')

limiterait d'abord l'impression aux premiers 10% de la liste et imprime seulement les fonctions qui font partie du fichier de nom ".*foo:". Par contre la commande:

print_stats('foo:', .1)

limiterait la liste à toutes les fonctions dont le nom de fichier est ".*foo:", et imprimerait seulement les 10% premières d'entre elles.

Statsprint_callers(restrictions[, ...])
Cette méthode de la classe Stats imprime la liste de toutes les fonctions qui appellent chaque fonction de la base de données de profilage. L'ordre est identique à celui fourni par print_stats(), et la définition de l'argument de restriction est aussi identique. Pour plus de facilité, un nombre est donné entre parenthèses aprés chaque appelant pour indiquer combien de temps cet appel spécifique a été fait. Un second nombre, non parenthésé, donne le temps cumulé passé dans la fonction indiquée à droite.

Statsprint_callees(restrictions[, ...])
Cette méthode de la classe Stats imprime la liste de toutes les fonctions qui ont été appelées par la fonction indiquée. A part le renversement de la direction des appels (c.-à-.d : a appelé vs a été appelée par ), les arguments et l'ordre sont identiques à ceux de la méthode print_callers().

Statsignore()
pas utiliser 1.5.1Ce n'est pas utile dans les versions modernes de Python. 1




Notes

1
Ceci à été utile une fois, quand on voulait dans Python imprimer toute expression insolite dont le résultat n'était pas None. La méthode est encore définie pour des raisons de compatibilité descendante.