Hi!
Ich **vermute** -- das heißt, ich weiß es nicht --, dass in beiden Fällen das Modul komplett gelesen, also in den Speicher geladen wird. Zusätzlich werden **wahrscheinlich** auch alle Module in den Speicher geladen, die in oberster Ebene des zu importierenden Moduls importiert werden. Also alle Module, die nicht in den Funktionen importiert werden.
Was für mich bedeutet, dass es **vermutlich** kaum einen Unterschied geben wird.
Eine meiner Messungen -- das ist schon eine Weile her -- hat ergeben, dass das Modul nur beim ersten Imporieren in den Speicher geladen wird. Egal wie oft man das Modul in anderen Funktionen oder in nachträglich importierten Modulen läd, es wird kein zusätzlicher Speicher mehr für das bereits importierte Modul verbraucht.
Wahrscheinlich wird geprüft, ob das Modul bereits geladen ist und es wird nur noch für den Bereich (global, lokal), in dem das Modul noch einmal importiert wird, der Namensbereich des Moduls zur Verfügung gestellt.
Allerdings sollte man es vermeiden, ein Modul in einer Funktion zu importieren, die oft aufgerufen wird. So gering auch der Aufwand, des Prüfens ob das Modul bereits geladen ist, scheint -- es ist ein Mehraufwand den man merkt.
Aber auf die Frage, ob
from foo import bar schneller ist als
import foo, habe ich leider keine wirkliche Antwort. Allerdings ist es mir auch egal.
Falls jemand fragt: Nein, die Tests habe ich nicht mehr.
mfg
Gerold