La regola generale è che le importazioni dovrebbero essere nella parte superiore del file , in quanto rende il codice più facile da seguire, e questo rende più facile capire di cosa un modulo avrà bisogno senza dover passare attraverso tutto il codice.
La Python guida di stile copre alcune linee guida fondamentali su come le importazioni dovrebbero guardare: http://www.python.org/dev/peps/pep-0008/#imports
In pratica, però, ci sono momenti in cui ha senso importare da all'interno di una particolare funzione. Questo si presenta con le importazioni che sarebbero circolare:
# Module 1
from module2 import B
class A(object):
def do_something(self):
my_b = B()
...
# Module 2
from module1 import A
class B(object):
def do_something(self):
my_a = A()
...
che non funzionano come è, ma si potrebbe aggirare la circolarità spostando l'importazione:
# Module 1
from module2 import B
class A(object):
def do_something(self):
my_b = B()
...
# Module 2
class B(object):
def do_something(self):
from module1 import A
my_a = A()
...
Idealmente, si dovrebbe progettare il classi tali che questo non sarebbe mai venuto fuori, e forse anche includerli nello stesso modulo. In quell'esempio di giocattolo, avere l'uno l'altro in realtà non ha senso. Tuttavia, in pratica, ci sono alcuni casi in cui ha più senso includere un'importazione per un metodo all'interno del metodo stesso, piuttosto che gettare tutto nello stesso modulo o estrarre il metodo in questione in qualche altro oggetto.
Ma, a meno che non si abbia una buona ragione per deviare, dico andare con la convenzione top-of-the-module.
Ancora un po 'confuso. Il caricatore non deve caricare comunque il modulo esterno, nel caso venga chiamata un'eccezione? L'unico sovraccarico che riesco a vedere è solo una riga aggiuntiva di codice nell'eccezione. – tetris11
Basta essere chiari nel codice, fare le importazioni nella parte superiore del file. –
@JakobBowyer Ma qual è la differenza, il rendimento è quello che sto davvero chiedendo – tetris11