-
Sujet
-
Bonjour,
quand il s’agit de comparer les performances de deux commandes, plusieurs solutions s’offrent à nous. Je vais ici en présenter deux.
On peut tout d’abord utiliser la librairie timeit.
Exemple :
>>> [int(i) for i in "1234567890"] [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] >>> list(map(int, "1234567890")) [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] >>> import timeit >>> timeit.timeit("[int(i) for i in \"1234567890\"]") 2.5239876000000003 >>> timeit.timeit("list(map(int, \"1234567890\"))") 2.1149556999999994
Celle-ci va exécuter plusieurs fois la commande et donner le temps d’exécution total. On peut changer le nombre d’exécution de la commande avec :
>>> timeit.timeit("[int(i) for i in \"1234567890\"]", number=100) 0.00024070000000619984 >>> timeit.timeit("list(map(int, \"1234567890\"))", number=100) 0.00020670000000677646
Mais il y aussi d’autres paramètres.
>>> help(timeit.timeit) Help on function timeit in module timeit: timeit(stmt='pass', setup='pass', timer=<built-in function perf_counter>, number=1000000, globals=None) Convenience function to create Timer object and call timeit method.
et si vous voulez tester des fonctions que vous avez vous même programmé, vous pouvez utiliser la librairie dis qi donnera les instructions de la machine virtuelle python correspondant au code donné.
>>> def f1(): print("hello world") >>> def f2(): print("hello", end=" ") print("world") >>> import dis >>> dis.dis(f1) 2 0 LOAD_GLOBAL 0 (print) 2 LOAD_CONST 1 ('hello world') 4 CALL_FUNCTION 1 6 POP_TOP 8 LOAD_CONST 0 (None) 10 RETURN_VALUE >>> dis.dis(f2) 2 0 LOAD_GLOBAL 0 (print) 2 LOAD_CONST 1 ('hello') 4 LOAD_CONST 2 (' ') 6 LOAD_CONST 3 (('end',)) 8 CALL_FUNCTION_KW 2 10 POP_TOP 3 12 LOAD_GLOBAL 0 (print) 14 LOAD_CONST 4 ('world') 16 CALL_FUNCTION 1 18 POP_TOP 20 LOAD_CONST 0 (None) 22 RETURN_VALUE
On voit ici que f2 va exécuter plus d’instructions que f1. Ici ca parait évident. Pas besoin de passer par dis. Mais, quand il s’agit par exemple de comparer les fonctions normales et les fonctions lambdas (voir autre post).. cela peut s’avérer utile.
- Vous devez être connecté pour répondre à ce sujet.