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