This directory contains various demonstrations of what you can do with
Python.  They were all written by me except where explicitly stated
otherwise -- in general, demos contributed by others ends up in the
../Contrib directory, unless I think they're of utmost general
importance (like Matt Conway's Tk demos).

A fair number of utilities that are useful when while developing
Python code can be found in the ../Tools directory -- some of these
can also be considered good examples of how to write Python code.

Finally, in order to save disk space and net bandwidth, not all
subdirectories listed here are distributed.  They are listed just
in case I change my mind about them.


cgi             CGI examples (see also ../Tools/faqwiz/.)

classes         Some examples of how to use classes.

comparisons     A set of responses to a really old language-comparison
                challenge.

curses          A set of curses demos.

distutils       Test for using transparent 2to3 conversion in distutils.

embed           An example of embedding Python in another application
                (see also pysvr).

imputil         Demonstration subclasses of imputil.Importer.

md5test         Test program for the optional md5 module.

newmetaclasses  Demonstration of metaclasses.

parser          Example using the parser module.

pysvr           An example of embedding Python in a threaded
                application.

rpc             A set of classes for building clients and servers for
                Sun RPC.

scripts         Some useful Python scripts that I put in my bin
                directory.  No optional built-in modules needed.

sockets         Examples for the new built-in module 'socket'.

threads         Demos that use the 'thread' module.  (Currently these
                only run on SGIs, but this may change in the future.)

tix             Demos using the Tix widget set addition to Tkinter.

tkinter         Demos using the Tk interface (including Matt Conway's
                excellent set of demos).

turtle          Demos for the "turtle" module.

xml             Some XML demos.

zlib            Some demos for the zlib module (see also the standard
                library module gzip.py).
