web-dev-qa-db-fra.com

Qu'est-ce que% timeit en python?

Je lis toujours le code pour calculer l'heure comme ceci:

%timeit function()

Pouvez-vous expliquer ce que signifie "%" ici?

Je pense que le "%" est toujours utilisé pour remplacer quelque chose dans une chaîne, comme% s signifie remplacer une chaîne,% d remplacer une donnée, mais je n'ai aucune idée de ce cas.

61
xirururu

%timeit est une fonction ipython magic , qui peut être utilisée pour chronométrer un morceau de code particulier (une seule instruction d'exécution ou une seule méthode).

De la docs:

% timeit

Time execution of a Python statement or expression

Usage, in line mode:
    %timeit [-n<N> -r<R> [-t|-c] -q -p<P> -o] statement

Pour l'utiliser, par exemple si nous voulons savoir si utiliser xrange est plus rapide que d'utiliser range, vous pouvez simplement faire:

In [1]: %timeit for _ in range(1000): True
10000 loops, best of 3: 37.8 µs per loop

In [2]: %timeit for _ in xrange(1000): True
10000 loops, best of 3: 29.6 µs per loop

Et vous obtiendrez les horaires pour eux.

Le principal avantage de %timeit sont:

  • que vous n'avez pas à importer timeit.timeit, et exécutez le code plusieurs fois pour déterminer quelle est la meilleure approche.

  • % timeit calculera automatiquement le nombre d'analyses requis pour votre code en fonction d'une fenêtre d'exécution de 2 secondes au total.

  • Vous pouvez également utiliser les variables de la console en cours sans transmettre l'extrait de code complet comme dans le cas de timeit.timeit pour construire la variable qui est construite dans un autre environnement pour lequel timeit fonctionne.

59
mu 無

C'est ce qu'on appelle une ligne magique dans iPython. Ils sont uniques en ce sens que leurs arguments s’étendent jusqu’à la fin de la ligne actuelle et que les magies elles-mêmes sont réellement structurées pour le développement en ligne de commande. timeit est utilisé pour chronométrer l'exécution du code.

Si vous voulez voir toutes les magies que vous pouvez utiliser, vous pouvez simplement taper:

%lsmagic

pour obtenir une liste des magies de ligne et des cellules.

Quelques informations magiques supplémentaires issues de la documentation ici :

IPython a un système de commandes appelé magics qui fournit efficacement un mini langage de commande orthogonal à la syntaxe de Python = et est extensible par l’utilisateur avec de nouvelles commandes.

Selon que vous êtes en mode ligne ou cellule, il y a deux façons différentes d'utiliser %timeit. Votre question illustre le premier moyen:

In [1]: %timeit range(100)

vs.

In [1]: %%timeit 
      : x = range(100)
      :
26
miradulo

IPython les intercepte, elles s'appellent des commandes magiques intégrées, voici la liste: https://ipython.org/ipython-doc/dev/interactive/magics.html

Vous pouvez également créer vos propres magics personnalisés, https://ipython.org/ipython-doc/dev/config/custommagics.html

Votre timeit est ici https://ipython.org/ipython-doc/dev/interactive/magics.html#magic-timeit

4
bakkal

Je voudrais juste ajouter un autre avantage utile d'utiliser% timeit à réponse par mu 無 que:

  • Vous pouvez également utiliser les variables de la console en cours sans transmettre l’extrait de code complet comme dans le cas de timeit.timeit pour construire la variable construite dans un autre environnement que timeit fonctionne.

PS: Je sais que ce devrait être un commentaire à répondre ci-dessus, mais je n’ai pas assez de réputation pour le moment. J'espère que ce que j’écrirai sera utile à quelqu'un et qu’il me permettra de gagner suffisamment de réputation pour commenter la prochaine fois.

2
Ankit Agrawal