[Tutor] loading modules only when needed and PEP 008
Eric Walstad
eric at ericwalstad.com
Thu Mar 20 00:06:50 CET 2008
Hi Tim,
Tim Michelsen wrote:
> Hello fellow Pythonistas,
> I have a question concerning import statements.
...
> it takes a lot
> of time for a TKinter-GUI to start up. And this start-up time is even
> longer when matplotlib is imported
....
> a optimized version would be:
> import sys
>
> plot_data = 'yes' # option: yes/no
>
> if plot_data == 'yes':
> import matplotlib
> else:
> pass
...
> How would you handle such a case?
> What is recommended in such a case?
> Does anyone have experience with this?
Beware that code later in your module that calls matplotlib.foo() may
fail if plot_data is not 'yes'. When I do this sort of thing I like to
move my imports into my functions/methods. The 'main' code then
conditionally calls the function/method. All the code in the function
safely assumes that the import has been done but code in the calling
function assumes the import hasn't been done.
-----
if plot_data:
show_plot_data(mydata)
-----
def show_plot_data(data):
"load matplotlib and show the user the data"
import matplotlib
...do stuff with matplotlib...
-----
And as we are talking about style, note that your
else:
pass
isn't really necessary but it does make it explicitly clear that you are
choosing not to do anything if the plot_data isn't 'yes'. Are those
tabs you're using? Four spaces are preferred, according to the style guide.
More information about the Tutor
mailing list