Prasad, Ramit wrote:
In any event, you shouldn't be worrying about something like overhead until 
after your base prorgram is written.

Base programs are written. I was just looking into insight about the mechanics 
behind importing :)
For instance, do these libraries normally lazy load? If you have mod1.mod2 and 
mod1.mod3 and import mod1 does it usually also internally load mod2/3? import 
mod1.mod2 (or do from mod1 import mod2) does it avoid any loading of mod3 or 
does it do that as part of loading mod1?

That depends on the module.

In the case of os, it has code like the following:


if 'posix' in _names:
    name = 'posix'
    linesep = '\n'
    from posix import *
    try:
        from posix import _exit
    except ImportError:
        pass
    import posixpath as path

    import posix
    __all__.extend(_get_exports_list(posix))
    del posix

elif 'nt' in _names:
    # ... similar code
elif 'os2' in _names:
    # ...
elif 'mac' in _names:
    # ...
elif 'ce' in _names:
    # ...
elif 'riscos' in _names:
    # ...
else:
    # raise exception

So in the case of os, no, it does not lazily load path only when needed, and os.path is available as soon as you import os, without any further imports.

However, if the module is a more modern package, the situation *may* be different. A package uses a directory with sub-modules, plus an __init__.py file. In this case, the behaviour is entirely up to the author.

Here's an example from one of my own Python 3 libraries: I have a package that (currently) looks something like this:

stats/
  +--  __init__.py
  +--  co.py
  +--  order.py
  +--  utils.py
  +--  _tests/
         +--  test_co.py
         ... etc.

(greatly simplified).

When you call "import stats", Python reads the file stats/__init__.py, compiles it and creates a module from it. __init__.py in turn includes a line "from . import utils". (This is Python 3 syntax, so it doesn't work with Python 2.) That line imports the stats/utils.py submodule and makes it available from within stats as stats.utils.

However the sub-modules co.py and order.py are *not* imported by the main module. They are only loaded on demand, when you say "import stats.co" or "from stats.order import median" or similar.

So it depends on the module.



--
Steven

_______________________________________________
Tutor maillist  -  [email protected]
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to