J'ai été surpris de ne pas voir les coûts réels des contrôles répétés de la charge déjà affichés, bien qu'il y ait beaucoup de bonnes explications sur ce à quoi il faut s'attendre.
Si vous importez au sommet, vous prenez le coup de charge quoi qu'il arrive. C'est assez faible, mais généralement en millisecondes, pas en nanosecondes.
Si vous importez à l'intérieur d'une (ou plusieurs) fonction(s), vous ne prenez que le coup pour le chargement. si y quand l'une de ces fonctions est appelée en premier. Comme beaucoup l'ont souligné, si cela ne se produit pas du tout, vous économisez le temps de chargement. Mais si la (les) fonction(s) est (sont) appelée(s) souvent, vous prenez un coup répété mais beaucoup plus petit (pour vérifier qu'elle(s) a a été chargé ; pas pour le rechargement proprement dit). D'un autre côté, comme @aaronasterling l'a souligné, vous économisez aussi un peu parce que l'importation dans une fonction permet à la fonction d'utiliser des données légèrement plus rapides. variable locale pour identifier le nom plus tard ( http://stackoverflow.com/questions/477096/python-import-coding-style/4789963#4789963 ).
Voici les résultats d'un test simple qui importe quelques éléments à l'intérieur d'une fonction. Les temps rapportés (en Python 2.7.14 sur un Intel Core i7 à 2,3 GHz) sont indiqués ci-dessous (le fait que le 2e appel prenne plus de temps que les appels suivants semble cohérent, bien que je ne sache pas pourquoi).
0 foo: 14429.0924 µs
1 foo: 63.8962 µs
2 foo: 10.0136 µs
3 foo: 7.1526 µs
4 foo: 7.8678 µs
0 bar: 9.0599 µs
1 bar: 6.9141 µs
2 bar: 7.1526 µs
3 bar: 7.8678 µs
4 bar: 7.1526 µs
Le code :
from __future__ import print_function
from time import time
def foo():
import collections
import re
import string
import math
import subprocess
return
def bar():
import collections
import re
import string
import math
import subprocess
return
t0 = time()
for i in xrange(5):
foo()
t1 = time()
print(" %2d foo: %12.4f \xC2\xB5s" % (i, (t1-t0)*1E6))
t0 = t1
for i in xrange(5):
bar()
t1 = time()
print(" %2d bar: %12.4f \xC2\xB5s" % (i, (t1-t0)*1E6))
t0 = t1