Yes relative imports are explicitly discouraged in PEP
8<http://www.python.org/dev/peps/pep-0008/>.
 Look for the imports section.

I do not recommend importing at runtime which is what you are doing when you
put imports inside function/methods.  There are performance problems when
calling imports repeatedly.  One possible method is to use a lazy import
paradigm described at the end of this section on import
overhead<http://wiki.python.org/moin/PythonSpeed/PerformanceTips#Import_Statement_Overhead>
.

The only reason I think it is ok to do imports inside function/method code
is if you don't know what you need to import until runtime, but in those
cases you wouldn't use the standard "import foo" syntax, since you would
need to dynamically choose what to import.

Another reason folks hide imports inside function/method code is to solve
circular import issues.  This is a consistently unproductive solution and
will create problems over time through hidden import dependencies that
aren't discovered until runtime.  circular imports can almost always be
resolved through some code and package reorganization.  I like this
article<http://effbot.org/zone/import-confusion.htm>on how import
works in python.

Brian



On Thu, Jun 2, 2011 at 10:39 AM, Cal Leeming [Simplicity Media Ltd] <
cal.leem...@simplicitymedialtd.co.uk> wrote:

> Hey guys,
>
> This is more of a python question, than a Django specific one, but it's
> been bugging me for years now lol.
>
> I'm trying to figure out if it is better to do imports at the top of the
> file, or within the function/methods themselves.
>
> I guess the questions I'm asking are:
>
>    - Is there any (serious) performance issues by doing imports every time
>    the function/method is called
>    - Is there a preferred style / guideline when it comes to imports?
>    (maybe a PEP somewhere?)
>    - Are relative imports discouraged? (from .. import package)
>
> Obviously, the answers would depend on different scenarios, so I'm looking
> for a discussion really, rather than a set in stone answer.
>
> Example 1:
> import os
> def test():
>    print os.uname()
> def test2():
>    print os.uname()
> test()
> test2()
>
> Example 2:
> import os
> class test:
>    def test(self):
>        print os.uname()
>
>
> Example 2:
> class test:
>    def test(self):
>        import os
>        print os.uname()
>    def test2(self):
>        import os
>        print os.uname()
>
> t = test()
> t.test()
> t.test2()
>
>  --
> You received this message because you are subscribed to the Google Groups
> "Django users" group.
> To post to this group, send email to django-users@googlegroups.com.
> To unsubscribe from this group, send email to
> django-users+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/django-users?hl=en.
>



-- 
Brian Bouterse
ITng Services

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to