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
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to