Any adv. in importing a module and some objects in the same module, into the same file?

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Wed Apr 22 02:13:14 EDT 2009


En Mon, 20 Apr 2009 02:22:08 -0300, alex23 <wuwei23 at gmail.com> escribió:

> On Apr 17, 7:19 pm, Visco Shaun <visc... at gmail.com> wrote:
>> What is the use of second import as the first import will be
>> enough(AFAIK) to access anything intended by the second import?
>> Is there any kind of advantage?
>
> While Piet's explanation is correct for the logging module, you'll
> also see examples like:
>
>     import os
>     import os.path
>
> Where os.path _is_ accessible via the original os import.

logging is a package, and os is just a module. Usually you *cannot* write  
`import foo.bar` when foo is not a package, so `import os.path` would  
normally be an error. But the os module explicitely adds "os.path" to  
sys.modules so it becomes valid.
That really confused me a lot when I started using Python.

> I believe that in this case, os.path is imported and stored against
> 'os.path', so any further references to it will be handled by the
> standard module lookup, rather than having to look up the 'os' import
> and then use getattr to reach path.

(os.path is *not* a typical example!)

If you write `print os.path.dirname(...)` then the name "path" is looked  
into the os module as any other attribute. But if you use `import os.path  
as path` or `from os import path` then the name "path" can be used  
directly as in "print path.dirname(...)"

> I would expect that this is mostly
> of interest if you were using os.path.methods in an inner loop, to
> reduce the number of lookups.

In that case I'd assign the desired function to a local name, to avoid any  
name lookup inside the loop.

-- 
Gabriel Genellina




More information about the Python-list mailing list