Part I of an update for Python 2.3.
diff --git a/Misc/cheatsheet b/Misc/cheatsheet
index a4d96e2..828b54e 100644
--- a/Misc/cheatsheet
+++ b/Misc/cheatsheet
@@ -1,7 +1,7 @@
-                          Python 2.0 Quick Reference
+                          Python 2.3 Quick Reference
 
 
-
+ 25 Jan 2003  upgraded by Raymond Hettinger for Python 2.3
  16 May 2001  upgraded by Richard Gruet and Simon Brunning for Python 2.0
  2000/07/18  upgraded by Richard Gruet, rgruet@intraware.com for Python 1.5.2
 from V1.3 ref
@@ -19,32 +19,14 @@
 python.sourceforge.net/    ActivePython : http://www.ActiveState.com/ASPN/
 Python/
 newsgroup: comp.lang.python  Help desk: help@python.org
-Resources: http://starship.python.net/ and http://www.vex.net/parnassus/
+Resources: http://starship.python.net/
+           http://www.vex.net/parnassus/
+           http://aspn.activestate.com/ASPN/Cookbook/Python
+FAQ:       http://www.python.org/cgi-bin/faqw.py
 Full documentation: http://www.python.org/doc/
-An excellent Python reference book: Python Essential Reference by David Beazley
-(New Riders)
-
-
-Contents
-
-  * Invocation Options
-  * Environment Variables
-  * Lexical Entities : keywords, identifiers, strings, numbers, sequences,
-    dictionaries, operators
-  * Basic Types And Their Operations
-  * Advanced Types
-  * Statements
-  * Built In Functions
-  * Built In Exceptions
-  * Standard methods & operators redefinition in user-created Classes
-  * Special informative state attributes for some types
-  * Important Modules : sys, os, posix, posixpath, shutil, time, string, re,
-    math, getopt
-  * List of modules In base distribution
-  * Workspace Exploration And Idiom Hints
-  * Python Mode for Emacs
-  * The Python Debugger
-
+Excellent reference books:
+           Python Essential Reference by David Beazley (New Riders)
+           Python Pocket Reference by Mark Lutz (O'Reilly)
 
 
 Invocation Options
@@ -53,18 +35,21 @@
 
                               Invocation Options
 Option                                  Effect
+-c cmd  program passed in as string (terminates option list)
 -d      Outputs parser debugging information (also PYTHONDEBUG=x)
+-E      ignore environment variables (such as PYTHONPATH)
+-h      print this help message and exit
 -i      Inspect interactively after running script (also PYTHONINSPECT=x) and
         force prompts, even if stdin appears not to be a terminal
--O      Optimize generated bytecode (set __debug__ = 0 =>s suppresses asserts)
+-O      optimize generated bytecode (a tad; also PYTHONOPTIMIZE=x)
+-OO     remove doc-strings in addition to the -O optimizations
+-Q arg  division options: -Qold (default), -Qwarn, -Qwarnall, -Qnew
 -S      Don't perform 'import site' on initialization
 -t      Issue warnings about inconsistent tab usage (-tt: issue errors)
 -u      Unbuffered binary stdout and stderr (also PYTHONUNBUFFERED=x).
--U      Force Python to interpret all string literals as Unicode literals.
 -v      Verbose (trace import statements) (also PYTHONVERBOSE=x)
+-W arg : warning control (arg is action:message:category:module:lineno)
 -x      Skip first line of source, allowing use of non-unix Forms of #!cmd
-[DEL:-X [DEL:Disable class based built-in exceptions (for backward
-:DEL]   compatibility management of exceptions):DEL]
 -?      Help!
 -c      Specify the command to execute (see next section). This terminates the
 command option list (following options are passed as arguments to the command).
@@ -115,7 +100,7 @@
     assert    elif      from      lambda    return
     break     else      global    not       try
     class     except    if        or        while
-    continue  exec      import    pass
+    continue  exec      import    pass      yield
     def       finally   in        print
 
   * (list of keywords in std module: keyword)
@@ -174,9 +159,9 @@
 Numbers
 
     Decimal integer: 1234, 1234567890546378940L        (or l)
-    Octal integer: 0177, 0177777777777777777L (begin with a 0)
-    Hex integer: 0xFF, 0XFFFFffffFFFFFFFFFFL (begin with 0x or 0X)
-    Long integer (unlimited precision): 1234567890123456L (ends with L or l)
+    Octal integer: 0177, 0177777777777777777 (begin with a 0)
+    Hex integer: 0xFF, 0XFFFFffffFFFFFFFFFF (begin with 0x or 0X)
+    Long integer (unlimited precision): 1234567890123456
     Float (double precision): 3.14e-10, .001, 10., 1E3
     Complex: 1J, 2+3J, 4+5j (ends with J or j, + separates (float) real and
     imaginary parts)
@@ -206,8 +191,12 @@
 
 Dictionaries (Mappings)
 
-    Dictionary of length 0, 1, 2, etc:
-    {} {1 : 'first'} {1 : 'first',  'next': 'second'}
+    {}                              # Zero length empty dictionary
+    {1 : 'first'}                   # Dictionary with one (key, value) pair
+    {1 : 'first',  'next': 'second'}
+    dict([('one',1),('two',2)])     # Construct a dict from an item list
+    dict('one'=1, 'two'=2)          # Construct a dict using keyword args
+    dict.fromkeys(['one', 'keys'])  # Construct a dict from a sequence
 
 Operators and their evaluation order
 
@@ -235,7 +224,10 @@
 Lowest  lambda args: expr                 anonymous function
 
 Alternate names are defined in module operator (e.g. __add__ and add for +)
-Most operators are overridable
+Most operators are overridable.
+
+Many of binary operators support augmented assignment:
+        x += 1                            # Same as x = x + 1
 
 
 Basic Types and Their Operations
@@ -256,6 +248,9 @@
 Notes :
     Comparison behavior can be overridden for a given class by defining special
 method __cmp__.
+    The above comparisions return True or False which are of type bool
+(a subclass of int) and behave exactly as 1 or 0 except their type and
+that they print as True or False instead of 1 or 0.
     (1) X < Y < Z < W has expected meaning, unlike C
     (2) Compare object identities (i.e. id(object)), not object values.
 
@@ -344,6 +339,7 @@
 Operation                     Result                     Notes
 x in s     1 if an item of s is equal to x, else 0
 x not in s 0 if an item of s is equal to x, else 1
+for x in s: loops over the sequence
 s + t      the concatenation of s and t
 s * n, n*s n copies of s concatenated
 s[i]       i'th item of s, origin 0                       (1)
@@ -351,6 +347,7 @@
 len(s)     length of s
 min(s)     smallest item of s
 max(s)     largest item of (s)
+iter(s)    returns an iterator over s.  iterators define __iter__ and next()
 
 Notes :
     (1) if i or j is negative, the index is relative to the end of the string,
@@ -370,12 +367,12 @@
 s[i:j] = t       slice of s from i to j is replaced by t
 del s[i:j]       same as s[i:j] = []
 s.append(x)      same as s[len(s) : len(s)] = [x]
-s.extend(x)      same as s[len(s):len(s)]= x                (5)
 s.count(x)       return number of i's for which s[i] == x
+s.extend(x)      same as s[len(s):len(s)]= x   
 s.index(x)       return smallest i such that s[i] == x      (1)
 s.insert(i, x)   same as s[i:i] = [x] if i >= 0
-s.remove(x)      same as del s[s.index(x)]                  (1)
 s.pop([i])       same as x = s[i]; del s[i]; return x       (4)
+s.remove(x)      same as del s[s.index(x)]                  (1)
 s.reverse()      reverse the items of s in place            (3)
 s.sort([cmpFct]) sort the items of s in place             (2), (3)
 
@@ -391,12 +388,8 @@
 of space when sorting or reversing a large list.
            They don't return the sorted or reversed list to remind you of this
 side effect.
-     (4) [New 1.5.2] The pop() method is experimental and not supported by
-other mutable sequence types than lists.
-          The optional  argument i defaults to -1, so that by default the last
+     (4) [New 1.5.2] The optional  argument i defaults to -1, so that by default the last
 item is removed and returned.
-     (5) [New 1.5.2] Experimental ! Raises an exception when x is not a list
-object.
 
 
 
@@ -410,12 +403,18 @@
 del d[k]                   remove d[k] from d                       (1)
 d.clear()                  remove all items from d
 d.copy()                   a shallow copy of d
+d.get(k,defaultval)        the item of d with key k                 (4)
 d.has_key(k)               1 if d has key k, else 0
 d.items()                  a copy of d's list of (key, item) pairs  (2)
+d.iteritems()              an iterator over (key, value) pairs      (7)
+d.iterkeys()               an iterator over the keys of d           (7)
+d.itervalues()             an iterator over the values of d         (7)
 d.keys()                   a copy of d's list of keys               (2)
 d1.update(d2)              for k, v in d2.items(): d1[k] = v        (3)
 d.values()                 a copy of d's list of values             (2)
-d.get(k,defaultval)        the item of d with key k                 (4)
+d.pop(k)                   remove d[k] and return its value
+d.popitem()                remove and return an arbitrary           (6)
+                           (key, item) pair
 d.setdefault(k,defaultval) the item of d with key k                 (5)
 
     Notes :
@@ -431,6 +430,9 @@
     defaultVal, and adds k to map with value defaultVal. defaultVal is
     optional. When not provided and k is not in the map, None is returned and
     added to map.
+      (6) Raises a KeyError if the dictionary is emtpy.
+      (7) While iterating over a dictionary, the values may be updated but
+          the keys cannot be changed.
 
 Operations on strings
 
@@ -446,30 +448,33 @@
                   .
 s.count(sub[      return the number of occurrences of substring sub in     (2)
 ,start[,end]])    string s.
+s.decode(([       return a decoded version of s.                           (3)
+  encoding
+  [,errors]])
 s.encode([        return an encoded version of s. Default encoding is the
-encoding[,errors  current default string encoding.                         (3)
-]])
+  encoding        current default string encoding.                         (3)
+  [,errors]])
 s.endswith(suffix return true if s ends with the specified suffix,         (2)
-[,start[,end]])   otherwise return false.
+  [,start[,end]]) otherwise return False.
 s.expandtabs([    return a copy of s where all tab characters are          (4)
 tabsize])         expanded using spaces.
 s.find(sub[,start return the lowest index in s where substring sub is      (2)
 [,end]])          found. Return -1 if sub is not found.
 s.index(sub[      like find(), but raise ValueError when the substring is  (2)
 ,start[,end]])    not found.
-s.isalnum()       return true if all characters in s are alphanumeric,     (5)
-                  false otherwise.
-s.isalpha()       return true if all characters in s are alphabetic,       (5)
-                  false otherwise.
-s.isdigit()       return true if all characters in s are digit             (5)
-                  characters, false otherwise.
-s.islower()       return true if all characters in s are lowercase, false  (6)
+s.isalnum()       return True if all characters in s are alphanumeric,     (5)
+                  False otherwise.
+s.isalpha()       return True if all characters in s are alphabetic,       (5)
+                  False otherwise.
+s.isdigit()       return True if all characters in s are digit             (5)
+                  characters, False otherwise.
+s.islower()       return True if all characters in s are lowercase, False  (6)
                   otherwise.
-s.isspace()       return true if all characters in s are whitespace        (5)
-                  characters, false otherwise.
-s.istitle()       return true if string s is a titlecased string, false    (7)
+s.isspace()       return True if all characters in s are whitespace        (5)
+                  characters, False otherwise.
+s.istitle()       return True if string s is a titlecased string, False    (7)
                   otherwise.
-s.isupper()       return true if all characters in s are uppercase, false  (6)
+s.isupper()       return True if all characters in s are uppercase, False  (6)
                   otherwise.
 s.join(seq)       return a concatenation of the strings in the sequence
                   seq, seperated by 's's.
@@ -503,6 +508,8 @@
 s.translate(table return a copy of s mapped through translation table     (12)
 [,deletechars])   table.
 s.upper()         return a copy of s converted to uppercase.
+s.zfill(width)    return a string padded with zeroes on the left and
+                  sliding a minus sign left if necessary.  never truncates.
 
 Notes :
     (1) Padding is done using spaces.