Beautiful Python

rbt rbt at athop1.ath.vt.edu
Mon Dec 26 19:54:01 EST 2005


sconce at in-spec-inc.com wrote:
> Gekitsuu wrote:
>> I've been reading a lot of python modules lately to see how they work
>> and I've stumbled across something that's sort of annoying and wanted
>> to find out of there was a good reason behind it. In a Perl program
>> when you're calling other modules you'll add "use" statements at the
>> beginning of your script like:
>>
>> use strict;
>> use WWW::Mechanize;
>> use CGI;
>>
>> This seems to be the de facto standard in the Perl community but in
>> python it seems most of the code I look at has import statements
>> everywhere in the code. Is there a sound reason for putting the imports
>> there are are developers just loading modules in as they need them. I
>> own Damian Conway's book of Perl Best Practices and it seems from a
>> maintainability standpoint  that having all the modules declared at the
>> beginning would make it easier for someone coming behind you to see
>> what other modules they need to use yours. Being new I didn't know if
>> there was a performance reason for doing this or it is simply a common
>> habit of developers.
> 
> 
> Without taking anything away from other posts responding to your
> question, the first response perhaps should have been:
> 
>     "Imports are always put at the top of the file, just after
>      any module comments and docstrings, and before module
>      globals and constants."
> 
> Which is the "official" Python style guide, PEP 0008, at
> http://www.python.org/peps/pep-0008.html
> and basically a reflection of Guido's own recommendations.

I've always done it this way (import at the top in alphabetical order 
with standard modules before add-in modules). The one exception is that 
at times I use imports to make sure that certain modules are indeed 
installed. For example, when I must have win32 modules I import like this:

import os
import sys
import time

try:
     import win32api
except ImportError:
     print "The win32 extensions must be installed!"
     sys.exit()

> 
> There are reasons to break almost any rule sometimes(*), but I think
> you were asking whether there IS a rule -- which is an insightful,
> worthy question if you've been looking at code which begs it.
> 
> -Bill
> 
> 
> (*) PEP 0008 itself says, even before it lays out any rules,
> "know when to be inconsistent".
> 



More information about the Python-list mailing list