Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #20004

Re: when to use import statements in the header, when to use import statements in the blocks where they are used?

Date 2012-02-07 21:41 -0500
From Dave Angel <d@davea.name>
Subject Re: when to use import statements in the header, when to use import statements in the blocks where they are used?
References <CACUCHEBhLhCCLL3OOudBKnuD2BZJvDkYzjmoi_nsVR+JPzEENA@mail.gmail.com> <4F31D85B.4040406@davea.name> <CACUCHECoeiU4QfqZJSnd+n9vcORWq=oOFP-aSSS-FayBwhR28g@mail.gmail.com>
Newsgroups comp.lang.python
Message-ID <mailman.5531.1328668916.27778.python-list@python.org> (permalink)

Show all headers | View raw


You forgot to include the list in your reply, so I'm forwarding it for 
you.   One way you could have done it was to reply-all.


On 02/07/2012 09:32 PM, Patto wrote:
> Dave Angel:
>
> On Wed, Feb 8, 2012 at 10:05 AM, Dave Angel<d@davea.name>  wrote:
>
>> On 02/07/2012 08:48 PM, Lei Cheng wrote:
>>
>>> Hi all,
>>>
>>>     In a py file, when to use import statements in the header, when to use
>>> import statements in the blocks where they are used?
>>>     What are the best practices?
>>>     Thanks!
>>>
>>> Pat
>>>
>>>   Best practice is to put all the imports at the beginning of the module,
>> so they are easy to spot.
>>
>> If you put an import inside a function, it gets re-executed each time the
>> function is called, which is a waste of time.  Not too much, since import
>> first checks sys.modules to see if it's already loaded.
>>
>> Also, avoid the     from xxx import *    form, as it pollutes the
>> namespace.  And it makes it hard to figure out where a particular name is
>> declared.
>>
>> I believe these and other best practices can be found in pep8.
>>
>> http://www.python.org/dev/**peps/pep-0008/<http://www.python.org/dev/peps/pep-0008/>
>>
>> --
>>
>> DaveA
>>
>>
> yeah, I read pep8.
> However I find in the file path/to/djcelery/loaders.py from django-celery
> source, there are so many import/from statements used inside functions, I
> do not know why the author coded like this. Are there any special facts?
>

I can't speak for django or django-celery.  There are people that 
disagree on this, and there are some reasons to override the ones I 
mentioned.  One would be large modules that are not used in most 
circumstances, or not used till the program has run for a while.

If you put the import inside a function, you can save on startup time by 
deferring some of the logic till later.  And if there's a module that 
probably won't be used at all (eg. an error handler), perhaps you can 
avoid loading it at all.

I still think readability trumps all the other reasons, for nearly all 
programs.  Only once you decide you have a performance problem should 
you change that.

-- 

DaveA

Back to comp.lang.python | Previous | NextNext in thread | Find similar | Unroll thread


Thread

Re: when to use import statements in the header, when to use import statements in the blocks where they are used? Dave Angel <d@davea.name> - 2012-02-07 21:41 -0500
  Re: when to use import statements in the header, when to use import statements in the blocks where they are used? Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2012-02-09 03:32 +0000

csiph-web