La première fois que vous import goo
à partir de n'importe où (à l'intérieur ou à l'extérieur d'une fonction), goo.py
(ou d'autres importables forme) est chargé et sys.modules['goo']
est définie dans le module objet ainsi construit. Toute importation future au sein de la même exécution du programme (encore une fois, que ce soit à l'intérieur ou à l'extérieur d'une fonction) il suffit de regarder jusqu' sys.modules['goo']
et le lier à barename goo
dans le champ d'application approprié. Le dict de recherche et le nom de liaison sont très rapide des opérations.
En supposant que le premier import
devient totalement amortis sur le programme d'exécution de toute façon, avoir la "portée" être au niveau du module signifie que chaque utilisation d' goo.this
, goo.that
, etc, est de deux dict recherches -- un pour goo
et une pour le nom de l'attribut. Être de "niveau de la fonction" paie un supplément local-réglage variable par exécution de la fonction (même plus rapide que la recherche dans le dictionnaire!) mais la sauvegarde d'un dict de recherche (échanger pour un local de la variable de recherche, hyper rapide) pour chaque goo.this
(etc) l'accès, essentiellement à réduire de moitié le temps de ces recherches prennent.
Nous parlons de quelques nanosecondes d'une manière ou d'une autre, il n'est donc pas la peine d'optimisation. Le seul potentiellement considérable avantage d'avoir l' import
à l'intérieur d'une fonction est lorsque cette fonction peut ne pas être nécessaire à tous dans une exécution du programme, par exemple, que la fonction traite avec des erreurs, des anomalies, et de rares situations, en général; si c'est le cas, une course qui n'a pas besoin de la fonctionnalité ne sera pas à même de réaliser l'importation (et c'est une économie de microsecondes, et pas seulement nanosecondes), ne fonctionne que avez besoin de la fonctionnalité de payer le (modeste mais mesurable) des prix.
C'est encore une optimisation qui est seulement utile dans de jolies situations extrêmes, et il y a beaucoup d'autres que je considère avant d'essayer de faire sortir microsecondes de cette façon.