Where to place imports

Duncan Booth duncan.booth at invalid.invalid
Fri Jan 23 19:50:00 CET 2009


"John [H2O]" <washakie at gmail.com> wrote:

> So it isn't inefficient to import a bunch of modules that may not be
> used, say if only one function is used that doesn't rely on a larger
> module like numpy or pylab?
> 
Not really. If you import it at all then you might as well import it on 
startup i.e. at the top of the module. Importing from inside a function 
doesn't free up the imported module when the function returns, so you 
aren't going to save any memory in the long run.

I would accept that if you have a function that may not be called in most 
runs of the program, and that function uses some large module that wouldn't 
otherwise be loaded, then you might have a case for importing it only 
inside the function. But that's a very rare situation; otherwise, just 
import it at module scope.

BTW, if you ever find you are starting to write multi-threaded applications 
then you'll really regret it if you reuse code which does imports from 
inside functions. If two or more threads try to import a module 
simultaneously then one of them might find it that not everything is 
defined in the module exists when it tries to use it.



More information about the Python-list mailing list