Where to place imports
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