Clarifications:

A module is a file. It may or may not contain python code. If it does not an exception will be raised when importing.

Import executes the module's code exactly the same as if the module had been run as a script (main program).

References to module objects are stored in a dict (sys.modules)s. You will notice many modules that have been "pre-imported":

>>> import sys
>>> for x in sys.modules.keys(): print x
...
'copy_reg'
'sre_compile'
'locale'
'_sre'
'functools'
'encodings'
'site'
'__builtin__'
'operator'
'__main__'
'types'
'encodings.encodings'
'abc'
'encodings.cp437'
'errno'
'encodings.codecs'
'sre_constants'
're'
'_abcoll'
'ntpath'
'_codecs'
'nt'
'_warnings'
'genericpath'
'stat'
'zipimport'
'encodings.__builtin__'
'warnings'
'UserDict'
'encodings.cp1252'
'sys'
'codecs'
'os.path'
'_functools'
'_locale'
'signal'
'linecache'
'encodings.aliases'
'exceptions'
'sre_parse'
'os'
>>>

So all import sys does is:
  sys = sys.modules['sys']

Whereas import foo (assuming we refer to foo.py):
  if 'foo' in sys.modules:
    foo = sys.modules['foo']
  else:
    compile foo.py
    if successful:
      execute the compiled code thus creating a module object
      if successful:
        sys.modules['foo'] = the new module object
        foo = sys.modules['foo']
Herelin lies a gotcha:
import foo again does NOT recompile; it just reassigns foo = sys.modules['foo'].
  reload(foo) will go thru the compile execute assign sequence again.

Notice __main__ - that is the module of the main program.
>>> sys.modules['__main__']
<module '__main__' (built-in)>
>>> dir(sys.modules['__main__'])
['__builtins__', '__doc__', '__name__', '__package__', 'sys', 'x']
>>>

--
Bob Gailer
919-636-4239
Chapel Hill NC

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

Reply via email to