Merged revisions 59488-59511 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r59489 | christian.heimes | 2007-12-14 03:33:57 +0100 (Fri, 14 Dec 2007) | 1 line

  Silence a warning about an unsed variable in debug builds
........
  r59490 | christian.heimes | 2007-12-14 03:35:23 +0100 (Fri, 14 Dec 2007) | 2 lines

  Fixed bug #1620: New @spam.getter property syntax modifies the property in place.
  I added also the feature that a @prop.getter decorator does not overwrite the doc string of the property if it was given as an argument to property().
........
  r59491 | raymond.hettinger | 2007-12-14 03:49:47 +0100 (Fri, 14 Dec 2007) | 1 line

  Cleaner method naming convention
........
  r59492 | christian.heimes | 2007-12-14 04:02:34 +0100 (Fri, 14 Dec 2007) | 1 line

  Fixed a warning in _codecs_iso2022.c and some non C89 conform // comments.
........
  r59493 | christian.heimes | 2007-12-14 05:38:13 +0100 (Fri, 14 Dec 2007) | 1 line

  Fixed warning in ssl module
........
  r59500 | raymond.hettinger | 2007-12-14 19:08:20 +0100 (Fri, 14 Dec 2007) | 1 line

  Add line spacing for readability
........
  r59501 | raymond.hettinger | 2007-12-14 19:12:21 +0100 (Fri, 14 Dec 2007) | 3 lines

  Update method names for named tuples.
........
  r59503 | georg.brandl | 2007-12-14 20:03:36 +0100 (Fri, 14 Dec 2007) | 3 lines

  Add a section about nested listcomps to the tutorial.
  Thanks to Ian Bruntlett and Robert Lehmann.
........
  r59504 | raymond.hettinger | 2007-12-14 20:19:59 +0100 (Fri, 14 Dec 2007) | 1 line

  Faster and simpler _replace() method
........
  r59505 | raymond.hettinger | 2007-12-14 22:51:50 +0100 (Fri, 14 Dec 2007) | 1 line

  Add usage note
........
  r59507 | andrew.kuchling | 2007-12-14 23:41:18 +0100 (Fri, 14 Dec 2007) | 1 line

  Remove warning about URL
........
  r59510 | andrew.kuchling | 2007-12-14 23:52:36 +0100 (Fri, 14 Dec 2007) | 1 line

  Bump the version number, and make a few small edits
........
  r59511 | christian.heimes | 2007-12-15 00:42:36 +0100 (Sat, 15 Dec 2007) | 2 lines

  Fixed bug #1628
  The detection now works on Unix with Makefile, Makefile with VPATH and on Windows.
........
diff --git a/Lib/collections.py b/Lib/collections.py
index 5fb0e05..2a7bb62 100644
--- a/Lib/collections.py
+++ b/Lib/collections.py
@@ -26,12 +26,12 @@
     (11, 22)
     >>> p.x + p.y                       # fields also accessable by name
     33
-    >>> d = p.__asdict__()              # convert to a dictionary
+    >>> d = p._asdict()                 # convert to a dictionary
     >>> d['x']
     11
     >>> Point(**d)                      # convert from a dictionary
     Point(x=11, y=22)
-    >>> p.__replace__(x=100)            # __replace__() is like str.replace() but targets named fields
+    >>> p._replace(x=100)               # _replace() is like str.replace() but targets named fields
     Point(x=100, y=22)
 
     """
@@ -49,8 +49,8 @@
             raise ValueError('Type names and field names cannot start with a number: %r' % name)
     seen_names = set()
     for name in field_names:
-        if name.startswith('__') and name.endswith('__') and len(name) > 3:
-            raise ValueError('Field names cannot start and end with double underscores: %r' % name)
+        if name.startswith('_'):
+            raise ValueError('Field names cannot start with an underscore: %r' % name)
         if name in seen_names:
             raise ValueError('Encountered duplicate field name: %r' % name)
         seen_names.add(name)
@@ -59,19 +59,19 @@
     argtxt = repr(field_names).replace("'", "")[1:-1]   # tuple repr without parens or quotes
     reprtxt = ', '.join('%s=%%r' % name for name in field_names)
     template = '''class %(typename)s(tuple):
-        '%(typename)s(%(argtxt)s)'
-        __slots__ = ()
-        __fields__ = property(lambda self: %(field_names)r)
+        '%(typename)s(%(argtxt)s)' \n
+        __slots__ = () \n
+        _fields = property(lambda self: %(field_names)r) \n
         def __new__(cls, %(argtxt)s):
-            return tuple.__new__(cls, (%(argtxt)s))
+            return tuple.__new__(cls, (%(argtxt)s)) \n
         def __repr__(self):
-            return '%(typename)s(%(reprtxt)s)' %% self
-        def __asdict__(self, dict=dict, zip=zip):
-            'Return a new dict mapping field names to their values'
-            return dict(zip(%(field_names)r, self))
-        def __replace__(self, **kwds):
+            return '%(typename)s(%(reprtxt)s)' %% self \n
+        def _asdict(self, dict=dict, zip=zip):
+            'Return a new dict which maps field names to their values'
+            return dict(zip(%(field_names)r, self)) \n
+        def _replace(self, **kwds):
             'Return a new %(typename)s object replacing specified fields with new values'
-            return %(typename)s(**dict(zip(%(field_names)r, self), **kwds))  \n''' % locals()
+            return %(typename)s(*map(kwds.get, %(field_names)r, self)) \n\n''' % locals()
     for i, name in enumerate(field_names):
         template += '        %s = property(itemgetter(%d))\n' % (name, i)
     if verbose: