Library and Third-Party Modules - Page 6
May 16, 2001
It was mentioned at the beginning of this chapter that the
standard Python distribution is itself split into modules, to
make it more manageable. Once Python has been installed, all of
the functionality in these library modules is available to the
Python programmer. All that is needed is to import the
appropriate modules, functions, classes, and so forth explicitly,
before using them.
Many of the most common and useful standard modules are discussed
throughout this book. However, the standard Python distribution
includes far more than what this book describes. At the very
least, you should browse through the table of contents of the
Python Library Reference.
In IDLE you can also easily browse to and look at those that are
written in Python using the Path Browser window. You can also
search for example code which uses them with the Find in Files
dialog, which can be opened from the Edit menu of the Python
Shell window. You can search through your own modules as well in
this way.
Available third-party modules, and links to them, are identified
on the Python home page. These simply need to be downloaded and
placed in a directory in your module search path in order to make
them available for import into your programs.
Python scoping rules and namespaces
This section on Python's scoping rules and namespaces will become
more interesting as your experience as a Python programmer grows.
If you are new to Python, you probably don't need to do anything
more than quickly read through the text to get the basic ideas.
For more details, consult the Python Language Reference.
The core concept here is that of a namespace. A namespace
in Python is a mapping from identifiers to objects and is usually
represented as a dictionary. When a block of code is executed in
Python it will have three namespaces: local, global, and
built-in (figure 11.1).
When an identifier is encountered during execution, Python first
looks in the local namespace for it. If it is not found,
the global namespace is looked in next. If it still has
not been found the built-in namespace is checked. If it
does not exist there, this is considered an error and a
NameError exception occurs.
For a module, a command executed in an interactive session or a
script running from a file, the global and local namespaces are
the same. The creation of any variable or function or importing
anything from another module will result in a new entry or
binding being made in this namespace.
A namespace maps names to variables, modules, functions,
or objects.
Its local, global and built-in namespaces are searched in
that order when a name is encountered in a block of
code.
An entry in a namespace is called a binding.
|
|
However, when a function call is made, a local namespace is
created and a binding is entered in it for each parameter of the
call. A new binding is then entered into this local namespace
whenever a variable is created within the function. The global
namespace of a function is the global namespace of the containing
block of the function (that of the module, script file, or
interactive session). It is independent of the dynamic context
from which it is called and there is no nested scoping.
In all of the above situations, the built-in namespace will be
that of the __ builtin__ module. This is the
module that contains, among other things, all the built-in
functions we've encountered (such as len, min, max, int,
float, long, list, tuple, cmp, range, str, and
repr) and the other built-in classes in Python such
as the exceptions (like NameError).
One thing that sometimes catches new Python programmers is the
fact that you can override items in the built-in module. If, for
example, you created a list in your program and put it in a
variable called list, you would not subsequently be
able to use the built-in list function. The entry for
your list would be found first. There is no differentiation
between names for functions and modules and other objects. The
first occurrence of a binding for a given identifier will be
used.
Enough talk, time to explore this with some examples. We use two
built-in functions, locals and
globals. They return dictionaries containing
the bindings in the local and global namespaces respectively.
Starting a new interactive session:
>>> locals()
{'__ doc__ ': None, '__ name__ ': '__ main__ ',
'__ builtins__ ':
<module '__ builtin__ '>}
>>> globals()
{'__ doc__ ': None, '__ name__ ': '__ main__ ',
'__ builtins__ ':
<module '__ builtin__ '>}
>>>
[Lines 2 and 3 above are one line as are lines 6 and 7. They
have been split for formatting purposes.]
The local and global namespaces for this new interactive session
are the same. They have three initial key/ value pairs that are
for internal use: (1) an empty documentation string __
doc__,(2) the main module name __ name__
(which for interactive sessions and scripts run from files is
always __ main__), and (3) the module used for the
built-in namespace __ builtins__ (the module
__ builtin__).
Where To Place Your Own Modules - Page 5
The Quick Python Book
Creating Bindings - Page 7
|