python:benchmark:imports

====== Imports ====== <Code python> # la forme from math import * a été testée différemment # pour éviter les warnings python -m timeit "from math import pi, ceil, floor, cos, pow" 1000000 loops, best of 3: 1.72 usec per loop python -m timeit "from math import pi" 1000000 loops, best of 3: 1.52 usec per loop python -m timeit "import math" 1000000 loops, best of 3: 0.71 usec per loop </Code> <gchart 370x200 hbar center "Importation de module"> from math import * := 3.34 from math import pi, ceil... := 1.72 from math import pi := 1.52 import math := 0.71 </gchart> La forme ''import *'' est mal aimée, et pour cause. En plus de ne donner aucun espace de nom au module importé, et donc à être invalide dans une fonction, elle rend la tache impossible au compilateur qui optimise beaucoup moins bien, et tout est plus lent. Et même sans l'étoile, en ciblant un ou plusieurs éléments du module, le syntaxe ''from'' s'avère biens moins rapide que la forme ''import''. Sachant qu'il est possible de raccourcir l'espace de nom avec le mot clé ''as'', la forme la plus simple remporte la palme. <Code python> import math as m m.floor() m.pi </Code> Lorsque python importe une deuxième fois un même module, on peut supposer qu'il ne le réimporte pas complètement, mais vérifie l'existance d'une version mise en cache en mémoire. Peut-on alors placer ses imports dans le corps de ses fonctions ou méthodes ? <Code python> import timeit timeit.timeit(stmt="import math", number=1, repeat=100000) timeit.timeit(stmt="import math", number=4, repeat=100000) timeit.timeit(stmt="import math", number=10, repeat=100000) </Code> 8.77e-07 3.21e-06 7.30e-06 <gchart 370x200 hbar center "Ré-importation du même module"> un seul appel := 0.87 quatre appels := 3.21 dix appels := 7.30 </gchart> L'appel à la procédure d'import demande tout de même du temps. Alors bien qu'il s'agisse de quelques micro secondes, cela reste une perte de temps tout à fait inutile((Il existe des cas très particuliers où les imports peuvent être volontairement placées à l'intérieur des méthodes, comme pour éviter une redondance cyclique.)). Voila pourquoi il est recommandé de placer les imports à la racine des fichiers, et tout en haut pour plus de lisibilité.