Ignore:
Timestamp:
Mar 19, 2014, 11:31:01 PM (11 years ago)
Author:
dmik
Message:

python: Merge vendor 2.7.6 to trunk.

Location:
python/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • python/trunk

  • python/trunk/Doc/library/collections.rst

    r2 r391  
    1 
    21:mod:`collections` --- High-performance container datatypes
    32===========================================================
     
    1615   __name__ = '<doctest>'
    1716
    18 This module implements high-performance container datatypes.  Currently,
    19 there are two datatypes, :class:`deque` and :class:`defaultdict`, and
    20 one datatype factory function, :func:`namedtuple`.
    21 
    22 .. versionchanged:: 2.5
    23    Added :class:`defaultdict`.
    24 
    25 .. versionchanged:: 2.6
    26    Added :func:`namedtuple`.
    27 
    28 The specialized containers provided in this module provide alternatives
    29 to Python's general purpose built-in containers, :class:`dict`,
    30 :class:`list`, :class:`set`, and :class:`tuple`.
    31 
    32 Besides the containers provided here, the optional :mod:`bsddb`
    33 module offers the ability to create in-memory or file based ordered
    34 dictionaries with string keys using the :meth:`bsddb.btopen` method.
    35 
    36 In addition to containers, the collections module provides some ABCs
    37 (abstract base classes) that can be used to test whether a class
    38 provides a particular interface, for example, is it hashable or
    39 a mapping.
    40 
    41 .. versionchanged:: 2.6
    42    Added abstract base classes.
    43 
    44 ABCs - abstract base classes
     17**Source code:** :source:`Lib/collections.py` and :source:`Lib/_abcoll.py`
     18
     19--------------
     20
     21This module implements specialized container datatypes providing alternatives to
     22Python's general purpose built-in containers, :class:`dict`, :class:`list`,
     23:class:`set`, and :class:`tuple`.
     24
     25=====================   ====================================================================  ===========================
     26:func:`namedtuple`      factory function for creating tuple subclasses with named fields      .. versionadded:: 2.6
     27:class:`deque`          list-like container with fast appends and pops on either end          .. versionadded:: 2.4
     28:class:`Counter`        dict subclass for counting hashable objects                           .. versionadded:: 2.7
     29:class:`OrderedDict`    dict subclass that remembers the order entries were added             .. versionadded:: 2.7
     30:class:`defaultdict`    dict subclass that calls a factory function to supply missing values  .. versionadded:: 2.5
     31=====================   ====================================================================  ===========================
     32
     33In addition to the concrete container classes, the collections module provides
     34:ref:`abstract base classes <collections-abstract-base-classes>` that can be
     35used to test whether a class provides a particular interface, for example,
     36whether it is hashable or a mapping.
     37
     38
     39:class:`Counter` objects
     40------------------------
     41
     42A counter tool is provided to support convenient and rapid tallies.
     43For example::
     44
     45    >>> # Tally occurrences of words in a list
     46    >>> cnt = Counter()
     47    >>> for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']:
     48    ...     cnt[word] += 1
     49    >>> cnt
     50    Counter({'blue': 3, 'red': 2, 'green': 1})
     51
     52    >>> # Find the ten most common words in Hamlet
     53    >>> import re
     54    >>> words = re.findall(r'\w+', open('hamlet.txt').read().lower())
     55    >>> Counter(words).most_common(10)
     56    [('the', 1143), ('and', 966), ('to', 762), ('of', 669), ('i', 631),
     57     ('you', 554),  ('a', 546), ('my', 514), ('hamlet', 471), ('in', 451)]
     58
     59.. class:: Counter([iterable-or-mapping])
     60
     61   A :class:`Counter` is a :class:`dict` subclass for counting hashable objects.
     62   It is an unordered collection where elements are stored as dictionary keys
     63   and their counts are stored as dictionary values.  Counts are allowed to be
     64   any integer value including zero or negative counts.  The :class:`Counter`
     65   class is similar to bags or multisets in other languages.
     66
     67   Elements are counted from an *iterable* or initialized from another
     68   *mapping* (or counter):
     69
     70        >>> c = Counter()                           # a new, empty counter
     71        >>> c = Counter('gallahad')                 # a new counter from an iterable
     72        >>> c = Counter({'red': 4, 'blue': 2})      # a new counter from a mapping
     73        >>> c = Counter(cats=4, dogs=8)             # a new counter from keyword args
     74
     75   Counter objects have a dictionary interface except that they return a zero
     76   count for missing items instead of raising a :exc:`KeyError`:
     77
     78        >>> c = Counter(['eggs', 'ham'])
     79        >>> c['bacon']                              # count of a missing element is zero
     80        0
     81
     82   Setting a count to zero does not remove an element from a counter.
     83   Use ``del`` to remove it entirely:
     84
     85        >>> c['sausage'] = 0                        # counter entry with a zero count
     86        >>> del c['sausage']                        # del actually removes the entry
     87
     88   .. versionadded:: 2.7
     89
     90
     91   Counter objects support three methods beyond those available for all
     92   dictionaries:
     93
     94   .. method:: elements()
     95
     96      Return an iterator over elements repeating each as many times as its
     97      count.  Elements are returned in arbitrary order.  If an element's count
     98      is less than one, :meth:`elements` will ignore it.
     99
     100            >>> c = Counter(a=4, b=2, c=0, d=-2)
     101            >>> list(c.elements())
     102            ['a', 'a', 'a', 'a', 'b', 'b']
     103
     104   .. method:: most_common([n])
     105
     106      Return a list of the *n* most common elements and their counts from the
     107      most common to the least.  If *n* is not specified, :func:`most_common`
     108      returns *all* elements in the counter.  Elements with equal counts are
     109      ordered arbitrarily:
     110
     111            >>> Counter('abracadabra').most_common(3)
     112            [('a', 5), ('r', 2), ('b', 2)]
     113
     114   .. method:: subtract([iterable-or-mapping])
     115
     116      Elements are subtracted from an *iterable* or from another *mapping*
     117      (or counter).  Like :meth:`dict.update` but subtracts counts instead
     118      of replacing them.  Both inputs and outputs may be zero or negative.
     119
     120            >>> c = Counter(a=4, b=2, c=0, d=-2)
     121            >>> d = Counter(a=1, b=2, c=3, d=4)
     122            >>> c.subtract(d)
     123            >>> c
     124            Counter({'a': 3, 'b': 0, 'c': -3, 'd': -6})
     125
     126   The usual dictionary methods are available for :class:`Counter` objects
     127   except for two which work differently for counters.
     128
     129   .. method:: fromkeys(iterable)
     130
     131      This class method is not implemented for :class:`Counter` objects.
     132
     133   .. method:: update([iterable-or-mapping])
     134
     135      Elements are counted from an *iterable* or added-in from another
     136      *mapping* (or counter).  Like :meth:`dict.update` but adds counts
     137      instead of replacing them.  Also, the *iterable* is expected to be a
     138      sequence of elements, not a sequence of ``(key, value)`` pairs.
     139
     140Common patterns for working with :class:`Counter` objects::
     141
     142    sum(c.values())                 # total of all counts
     143    c.clear()                       # reset all counts
     144    list(c)                         # list unique elements
     145    set(c)                          # convert to a set
     146    dict(c)                         # convert to a regular dictionary
     147    c.items()                       # convert to a list of (elem, cnt) pairs
     148    Counter(dict(list_of_pairs))    # convert from a list of (elem, cnt) pairs
     149    c.most_common()[:-n-1:-1]       # n least common elements
     150    c += Counter()                  # remove zero and negative counts
     151
     152Several mathematical operations are provided for combining :class:`Counter`
     153objects to produce multisets (counters that have counts greater than zero).
     154Addition and subtraction combine counters by adding or subtracting the counts
     155of corresponding elements.  Intersection and union return the minimum and
     156maximum of corresponding counts.  Each operation can accept inputs with signed
     157counts, but the output will exclude results with counts of zero or less.
     158
     159    >>> c = Counter(a=3, b=1)
     160    >>> d = Counter(a=1, b=2)
     161    >>> c + d                       # add two counters together:  c[x] + d[x]
     162    Counter({'a': 4, 'b': 3})
     163    >>> c - d                       # subtract (keeping only positive counts)
     164    Counter({'a': 2})
     165    >>> c & d                       # intersection:  min(c[x], d[x])
     166    Counter({'a': 1, 'b': 1})
     167    >>> c | d                       # union:  max(c[x], d[x])
     168    Counter({'a': 3, 'b': 2})
     169
     170.. note::
     171
     172   Counters were primarily designed to work with positive integers to represent
     173   running counts; however, care was taken to not unnecessarily preclude use
     174   cases needing other types or negative values.  To help with those use cases,
     175   this section documents the minimum range and type restrictions.
     176
     177   * The :class:`Counter` class itself is a dictionary subclass with no
     178     restrictions on its keys and values.  The values are intended to be numbers
     179     representing counts, but you *could* store anything in the value field.
     180
     181   * The :meth:`most_common` method requires only that the values be orderable.
     182
     183   * For in-place operations such as ``c[key] += 1``, the value type need only
     184     support addition and subtraction.  So fractions, floats, and decimals would
     185     work and negative values are supported.  The same is also true for
     186     :meth:`update` and :meth:`subtract` which allow negative and zero values
     187     for both inputs and outputs.
     188
     189   * The multiset methods are designed only for use cases with positive values.
     190     The inputs may be negative or zero, but only outputs with positive values
     191     are created.  There are no type restrictions, but the value type needs to
     192     support addition, subtraction, and comparison.
     193
     194   * The :meth:`elements` method requires integer counts.  It ignores zero and
     195     negative counts.
     196
     197.. seealso::
     198
     199    * `Counter class <http://code.activestate.com/recipes/576611/>`_
     200      adapted for Python 2.5 and an early `Bag recipe
     201      <http://code.activestate.com/recipes/259174/>`_ for Python 2.4.
     202
     203    * `Bag class <http://www.gnu.org/software/smalltalk/manual-base/html_node/Bag.html>`_
     204      in Smalltalk.
     205
     206    * Wikipedia entry for `Multisets <http://en.wikipedia.org/wiki/Multiset>`_.
     207
     208    * `C++ multisets <http://www.demo2s.com/Tutorial/Cpp/0380__set-multiset/Catalog0380__set-multiset.htm>`_
     209      tutorial with examples.
     210
     211    * For mathematical operations on multisets and their use cases, see
     212      *Knuth, Donald. The Art of Computer Programming Volume II,
     213      Section 4.6.3, Exercise 19*.
     214
     215    * To enumerate all distinct multisets of a given size over a given set of
     216      elements, see :func:`itertools.combinations_with_replacement`.
     217
     218          map(Counter, combinations_with_replacement('ABC', 2)) --> AA AB AC BB BC CC
     219
     220
     221:class:`deque` objects
     222----------------------
     223
     224.. class:: deque([iterable[, maxlen]])
     225
     226   Returns a new deque object initialized left-to-right (using :meth:`append`) with
     227   data from *iterable*.  If *iterable* is not specified, the new deque is empty.
     228
     229   Deques are a generalization of stacks and queues (the name is pronounced "deck"
     230   and is short for "double-ended queue").  Deques support thread-safe, memory
     231   efficient appends and pops from either side of the deque with approximately the
     232   same O(1) performance in either direction.
     233
     234   Though :class:`list` objects support similar operations, they are optimized for
     235   fast fixed-length operations and incur O(n) memory movement costs for
     236   ``pop(0)`` and ``insert(0, v)`` operations which change both the size and
     237   position of the underlying data representation.
     238
     239   .. versionadded:: 2.4
     240
     241   If *maxlen* is not specified or is *None*, deques may grow to an
     242   arbitrary length.  Otherwise, the deque is bounded to the specified maximum
     243   length.  Once a bounded length deque is full, when new items are added, a
     244   corresponding number of items are discarded from the opposite end.  Bounded
     245   length deques provide functionality similar to the ``tail`` filter in
     246   Unix. They are also useful for tracking transactions and other pools of data
     247   where only the most recent activity is of interest.
     248
     249   .. versionchanged:: 2.6
     250      Added *maxlen* parameter.
     251
     252   Deque objects support the following methods:
     253
     254
     255   .. method:: append(x)
     256
     257      Add *x* to the right side of the deque.
     258
     259
     260   .. method:: appendleft(x)
     261
     262      Add *x* to the left side of the deque.
     263
     264
     265   .. method:: clear()
     266
     267      Remove all elements from the deque leaving it with length 0.
     268
     269
     270   .. method:: count(x)
     271
     272      Count the number of deque elements equal to *x*.
     273
     274      .. versionadded:: 2.7
     275
     276   .. method:: extend(iterable)
     277
     278      Extend the right side of the deque by appending elements from the iterable
     279      argument.
     280
     281
     282   .. method:: extendleft(iterable)
     283
     284      Extend the left side of the deque by appending elements from *iterable*.
     285      Note, the series of left appends results in reversing the order of
     286      elements in the iterable argument.
     287
     288
     289   .. method:: pop()
     290
     291      Remove and return an element from the right side of the deque. If no
     292      elements are present, raises an :exc:`IndexError`.
     293
     294
     295   .. method:: popleft()
     296
     297      Remove and return an element from the left side of the deque. If no
     298      elements are present, raises an :exc:`IndexError`.
     299
     300
     301   .. method:: remove(value)
     302
     303      Removed the first occurrence of *value*.  If not found, raises a
     304      :exc:`ValueError`.
     305
     306      .. versionadded:: 2.5
     307
     308   .. method:: reverse()
     309
     310      Reverse the elements of the deque in-place and then return ``None``.
     311
     312      .. versionadded:: 2.7
     313
     314   .. method:: rotate(n)
     315
     316      Rotate the deque *n* steps to the right.  If *n* is negative, rotate to
     317      the left.  Rotating one step to the right is equivalent to:
     318      ``d.appendleft(d.pop())``.
     319
     320
     321   Deque objects also provide one read-only attribute:
     322
     323   .. attribute:: maxlen
     324
     325      Maximum size of a deque or *None* if unbounded.
     326
     327      .. versionadded:: 2.7
     328
     329
     330In addition to the above, deques support iteration, pickling, ``len(d)``,
     331``reversed(d)``, ``copy.copy(d)``, ``copy.deepcopy(d)``, membership testing with
     332the :keyword:`in` operator, and subscript references such as ``d[-1]``.  Indexed
     333access is O(1) at both ends but slows to O(n) in the middle.  For fast random
     334access, use lists instead.
     335
     336Example:
     337
     338.. doctest::
     339
     340   >>> from collections import deque
     341   >>> d = deque('ghi')                 # make a new deque with three items
     342   >>> for elem in d:                   # iterate over the deque's elements
     343   ...     print elem.upper()
     344   G
     345   H
     346   I
     347
     348   >>> d.append('j')                    # add a new entry to the right side
     349   >>> d.appendleft('f')                # add a new entry to the left side
     350   >>> d                                # show the representation of the deque
     351   deque(['f', 'g', 'h', 'i', 'j'])
     352
     353   >>> d.pop()                          # return and remove the rightmost item
     354   'j'
     355   >>> d.popleft()                      # return and remove the leftmost item
     356   'f'
     357   >>> list(d)                          # list the contents of the deque
     358   ['g', 'h', 'i']
     359   >>> d[0]                             # peek at leftmost item
     360   'g'
     361   >>> d[-1]                            # peek at rightmost item
     362   'i'
     363
     364   >>> list(reversed(d))                # list the contents of a deque in reverse
     365   ['i', 'h', 'g']
     366   >>> 'h' in d                         # search the deque
     367   True
     368   >>> d.extend('jkl')                  # add multiple elements at once
     369   >>> d
     370   deque(['g', 'h', 'i', 'j', 'k', 'l'])
     371   >>> d.rotate(1)                      # right rotation
     372   >>> d
     373   deque(['l', 'g', 'h', 'i', 'j', 'k'])
     374   >>> d.rotate(-1)                     # left rotation
     375   >>> d
     376   deque(['g', 'h', 'i', 'j', 'k', 'l'])
     377
     378   >>> deque(reversed(d))               # make a new deque in reverse order
     379   deque(['l', 'k', 'j', 'i', 'h', 'g'])
     380   >>> d.clear()                        # empty the deque
     381   >>> d.pop()                          # cannot pop from an empty deque
     382   Traceback (most recent call last):
     383     File "<pyshell#6>", line 1, in -toplevel-
     384       d.pop()
     385   IndexError: pop from an empty deque
     386
     387   >>> d.extendleft('abc')              # extendleft() reverses the input order
     388   >>> d
     389   deque(['c', 'b', 'a'])
     390
     391
     392:class:`deque` Recipes
     393^^^^^^^^^^^^^^^^^^^^^^
     394
     395This section shows various approaches to working with deques.
     396
     397Bounded length deques provide functionality similar to the ``tail`` filter
     398in Unix::
     399
     400   def tail(filename, n=10):
     401       'Return the last n lines of a file'
     402       return deque(open(filename), n)
     403
     404Another approach to using deques is to maintain a sequence of recently
     405added elements by appending to the right and popping to the left::
     406
     407    def moving_average(iterable, n=3):
     408        # moving_average([40, 30, 50, 46, 39, 44]) --> 40.0 42.0 45.0 43.0
     409        # http://en.wikipedia.org/wiki/Moving_average
     410        it = iter(iterable)
     411        d = deque(itertools.islice(it, n-1))
     412        d.appendleft(0)
     413        s = sum(d)
     414        for elem in it:
     415            s += elem - d.popleft()
     416            d.append(elem)
     417            yield s / float(n)
     418
     419The :meth:`rotate` method provides a way to implement :class:`deque` slicing and
     420deletion.  For example, a pure Python implementation of ``del d[n]`` relies on
     421the :meth:`rotate` method to position elements to be popped::
     422
     423   def delete_nth(d, n):
     424       d.rotate(-n)
     425       d.popleft()
     426       d.rotate(n)
     427
     428To implement :class:`deque` slicing, use a similar approach applying
     429:meth:`rotate` to bring a target element to the left side of the deque. Remove
     430old entries with :meth:`popleft`, add new entries with :meth:`extend`, and then
     431reverse the rotation.
     432With minor variations on that approach, it is easy to implement Forth style
     433stack manipulations such as ``dup``, ``drop``, ``swap``, ``over``, ``pick``,
     434``rot``, and ``roll``.
     435
     436
     437:class:`defaultdict` objects
    45438----------------------------
    46439
    47 The collections module offers the following ABCs:
     440.. class:: defaultdict([default_factory[, ...]])
     441
     442   Returns a new dictionary-like object.  :class:`defaultdict` is a subclass of the
     443   built-in :class:`dict` class.  It overrides one method and adds one writable
     444   instance variable.  The remaining functionality is the same as for the
     445   :class:`dict` class and is not documented here.
     446
     447   The first argument provides the initial value for the :attr:`default_factory`
     448   attribute; it defaults to ``None``. All remaining arguments are treated the same
     449   as if they were passed to the :class:`dict` constructor, including keyword
     450   arguments.
     451
     452   .. versionadded:: 2.5
     453
     454   :class:`defaultdict` objects support the following method in addition to the
     455   standard :class:`dict` operations:
     456
     457   .. method:: __missing__(key)
     458
     459      If the :attr:`default_factory` attribute is ``None``, this raises a
     460      :exc:`KeyError` exception with the *key* as argument.
     461
     462      If :attr:`default_factory` is not ``None``, it is called without arguments
     463      to provide a default value for the given *key*, this value is inserted in
     464      the dictionary for the *key*, and returned.
     465
     466      If calling :attr:`default_factory` raises an exception this exception is
     467      propagated unchanged.
     468
     469      This method is called by the :meth:`__getitem__` method of the
     470      :class:`dict` class when the requested key is not found; whatever it
     471      returns or raises is then returned or raised by :meth:`__getitem__`.
     472
     473      Note that :meth:`__missing__` is *not* called for any operations besides
     474      :meth:`__getitem__`. This means that :meth:`get` will, like normal
     475      dictionaries, return ``None`` as a default rather than using
     476      :attr:`default_factory`.
     477
     478
     479   :class:`defaultdict` objects support the following instance variable:
     480
     481
     482   .. attribute:: default_factory
     483
     484      This attribute is used by the :meth:`__missing__` method; it is
     485      initialized from the first argument to the constructor, if present, or to
     486      ``None``, if absent.
     487
     488
     489:class:`defaultdict` Examples
     490^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     491
     492Using :class:`list` as the :attr:`default_factory`, it is easy to group a
     493sequence of key-value pairs into a dictionary of lists:
     494
     495   >>> s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
     496   >>> d = defaultdict(list)
     497   >>> for k, v in s:
     498   ...     d[k].append(v)
     499   ...
     500   >>> d.items()
     501   [('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
     502
     503When each key is encountered for the first time, it is not already in the
     504mapping; so an entry is automatically created using the :attr:`default_factory`
     505function which returns an empty :class:`list`.  The :meth:`list.append`
     506operation then attaches the value to the new list.  When keys are encountered
     507again, the look-up proceeds normally (returning the list for that key) and the
     508:meth:`list.append` operation adds another value to the list. This technique is
     509simpler and faster than an equivalent technique using :meth:`dict.setdefault`:
     510
     511   >>> d = {}
     512   >>> for k, v in s:
     513   ...     d.setdefault(k, []).append(v)
     514   ...
     515   >>> d.items()
     516   [('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
     517
     518Setting the :attr:`default_factory` to :class:`int` makes the
     519:class:`defaultdict` useful for counting (like a bag or multiset in other
     520languages):
     521
     522   >>> s = 'mississippi'
     523   >>> d = defaultdict(int)
     524   >>> for k in s:
     525   ...     d[k] += 1
     526   ...
     527   >>> d.items()
     528   [('i', 4), ('p', 2), ('s', 4), ('m', 1)]
     529
     530When a letter is first encountered, it is missing from the mapping, so the
     531:attr:`default_factory` function calls :func:`int` to supply a default count of
     532zero.  The increment operation then builds up the count for each letter.
     533
     534The function :func:`int` which always returns zero is just a special case of
     535constant functions.  A faster and more flexible way to create constant functions
     536is to use :func:`itertools.repeat` which can supply any constant value (not just
     537zero):
     538
     539   >>> def constant_factory(value):
     540   ...     return itertools.repeat(value).next
     541   >>> d = defaultdict(constant_factory('<missing>'))
     542   >>> d.update(name='John', action='ran')
     543   >>> '%(name)s %(action)s to %(object)s' % d
     544   'John ran to <missing>'
     545
     546Setting the :attr:`default_factory` to :class:`set` makes the
     547:class:`defaultdict` useful for building a dictionary of sets:
     548
     549   >>> s = [('red', 1), ('blue', 2), ('red', 3), ('blue', 4), ('red', 1), ('blue', 4)]
     550   >>> d = defaultdict(set)
     551   >>> for k, v in s:
     552   ...     d[k].add(v)
     553   ...
     554   >>> d.items()
     555   [('blue', set([2, 4])), ('red', set([1, 3]))]
     556
     557
     558:func:`namedtuple` Factory Function for Tuples with Named Fields
     559----------------------------------------------------------------
     560
     561Named tuples assign meaning to each position in a tuple and allow for more readable,
     562self-documenting code.  They can be used wherever regular tuples are used, and
     563they add the ability to access fields by name instead of position index.
     564
     565.. function:: namedtuple(typename, field_names, [verbose=False], [rename=False])
     566
     567   Returns a new tuple subclass named *typename*.  The new subclass is used to
     568   create tuple-like objects that have fields accessible by attribute lookup as
     569   well as being indexable and iterable.  Instances of the subclass also have a
     570   helpful docstring (with typename and field_names) and a helpful :meth:`__repr__`
     571   method which lists the tuple contents in a ``name=value`` format.
     572
     573   The *field_names* are a sequence of strings such as ``['x', 'y']``.
     574   Alternatively, *field_names* can be a single string with each fieldname
     575   separated by whitespace and/or commas, for example ``'x y'`` or ``'x, y'``.
     576
     577   Any valid Python identifier may be used for a fieldname except for names
     578   starting with an underscore.  Valid identifiers consist of letters, digits,
     579   and underscores but do not start with a digit or underscore and cannot be
     580   a :mod:`keyword` such as *class*, *for*, *return*, *global*, *pass*, *print*,
     581   or *raise*.
     582
     583   If *rename* is true, invalid fieldnames are automatically replaced
     584   with positional names.  For example, ``['abc', 'def', 'ghi', 'abc']`` is
     585   converted to ``['abc', '_1', 'ghi', '_3']``, eliminating the keyword
     586   ``def`` and the duplicate fieldname ``abc``.
     587
     588   If *verbose* is true, the class definition is printed just before being built.
     589
     590   Named tuple instances do not have per-instance dictionaries, so they are
     591   lightweight and require no more memory than regular tuples.
     592
     593   .. versionadded:: 2.6
     594
     595   .. versionchanged:: 2.7
     596      added support for *rename*.
     597
     598Example:
     599
     600.. doctest::
     601   :options: +NORMALIZE_WHITESPACE
     602
     603   >>> Point = namedtuple('Point', ['x', 'y'], verbose=True)
     604   class Point(tuple):
     605       'Point(x, y)'
     606   <BLANKLINE>
     607       __slots__ = ()
     608   <BLANKLINE>
     609       _fields = ('x', 'y')
     610   <BLANKLINE>
     611       def __new__(_cls, x, y):
     612           'Create a new instance of Point(x, y)'
     613           return _tuple.__new__(_cls, (x, y))
     614   <BLANKLINE>
     615       @classmethod
     616       def _make(cls, iterable, new=tuple.__new__, len=len):
     617           'Make a new Point object from a sequence or iterable'
     618           result = new(cls, iterable)
     619           if len(result) != 2:
     620               raise TypeError('Expected 2 arguments, got %d' % len(result))
     621           return result
     622   <BLANKLINE>
     623       def __repr__(self):
     624           'Return a nicely formatted representation string'
     625           return 'Point(x=%r, y=%r)' % self
     626   <BLANKLINE>
     627       def _asdict(self):
     628           'Return a new OrderedDict which maps field names to their values'
     629           return OrderedDict(zip(self._fields, self))
     630   <BLANKLINE>
     631       def _replace(_self, **kwds):
     632           'Return a new Point object replacing specified fields with new values'
     633           result = _self._make(map(kwds.pop, ('x', 'y'), _self))
     634           if kwds:
     635               raise ValueError('Got unexpected field names: %r' % kwds.keys())
     636           return result
     637   <BLANKLINE>
     638       def __getnewargs__(self):
     639           'Return self as a plain tuple.   Used by copy and pickle.'
     640           return tuple(self)
     641   <BLANKLINE>
     642       __dict__ = _property(_asdict)
     643   <BLANKLINE>
     644       def __getstate__(self):
     645           'Exclude the OrderedDict from pickling'
     646           pass
     647   <BLANKLINE>
     648       x = _property(_itemgetter(0), doc='Alias for field number 0')
     649   <BLANKLINE>
     650       y = _property(_itemgetter(1), doc='Alias for field number 1')
     651   <BLANKLINE>
     652
     653   >>> p = Point(11, y=22)     # instantiate with positional or keyword arguments
     654   >>> p[0] + p[1]             # indexable like the plain tuple (11, 22)
     655   33
     656   >>> x, y = p                # unpack like a regular tuple
     657   >>> x, y
     658   (11, 22)
     659   >>> p.x + p.y               # fields also accessible by name
     660   33
     661   >>> p                       # readable __repr__ with a name=value style
     662   Point(x=11, y=22)
     663
     664Named tuples are especially useful for assigning field names to result tuples returned
     665by the :mod:`csv` or :mod:`sqlite3` modules::
     666
     667   EmployeeRecord = namedtuple('EmployeeRecord', 'name, age, title, department, paygrade')
     668
     669   import csv
     670   for emp in map(EmployeeRecord._make, csv.reader(open("employees.csv", "rb"))):
     671       print emp.name, emp.title
     672
     673   import sqlite3
     674   conn = sqlite3.connect('/companydata')
     675   cursor = conn.cursor()
     676   cursor.execute('SELECT name, age, title, department, paygrade FROM employees')
     677   for emp in map(EmployeeRecord._make, cursor.fetchall()):
     678       print emp.name, emp.title
     679
     680In addition to the methods inherited from tuples, named tuples support
     681three additional methods and one attribute.  To prevent conflicts with
     682field names, the method and attribute names start with an underscore.
     683
     684.. classmethod:: somenamedtuple._make(iterable)
     685
     686   Class method that makes a new instance from an existing sequence or iterable.
     687
     688   .. doctest::
     689
     690      >>> t = [11, 22]
     691      >>> Point._make(t)
     692      Point(x=11, y=22)
     693
     694.. method:: somenamedtuple._asdict()
     695
     696   Return a new :class:`OrderedDict` which maps field names to their corresponding
     697   values::
     698
     699      >>> p._asdict()
     700      OrderedDict([('x', 11), ('y', 22)])
     701
     702   .. versionchanged:: 2.7
     703      Returns an :class:`OrderedDict` instead of a regular :class:`dict`.
     704
     705.. method:: somenamedtuple._replace(kwargs)
     706
     707   Return a new instance of the named tuple replacing specified fields with new
     708   values::
     709
     710      >>> p = Point(x=11, y=22)
     711      >>> p._replace(x=33)
     712      Point(x=33, y=22)
     713
     714      >>> for partnum, record in inventory.items():
     715              inventory[partnum] = record._replace(price=newprices[partnum], timestamp=time.now())
     716
     717.. attribute:: somenamedtuple._fields
     718
     719   Tuple of strings listing the field names.  Useful for introspection
     720   and for creating new named tuple types from existing named tuples.
     721
     722   .. doctest::
     723
     724      >>> p._fields            # view the field names
     725      ('x', 'y')
     726
     727      >>> Color = namedtuple('Color', 'red green blue')
     728      >>> Pixel = namedtuple('Pixel', Point._fields + Color._fields)
     729      >>> Pixel(11, 22, 128, 255, 0)
     730      Pixel(x=11, y=22, red=128, green=255, blue=0)
     731
     732To retrieve a field whose name is stored in a string, use the :func:`getattr`
     733function:
     734
     735    >>> getattr(p, 'x')
     736    11
     737
     738To convert a dictionary to a named tuple, use the double-star-operator
     739(as described in :ref:`tut-unpacking-arguments`):
     740
     741   >>> d = {'x': 11, 'y': 22}
     742   >>> Point(**d)
     743   Point(x=11, y=22)
     744
     745Since a named tuple is a regular Python class, it is easy to add or change
     746functionality with a subclass.  Here is how to add a calculated field and
     747a fixed-width print format:
     748
     749    >>> class Point(namedtuple('Point', 'x y')):
     750            __slots__ = ()
     751            @property
     752            def hypot(self):
     753                return (self.x ** 2 + self.y ** 2) ** 0.5
     754            def __str__(self):
     755                return 'Point: x=%6.3f  y=%6.3f  hypot=%6.3f' % (self.x, self.y, self.hypot)
     756
     757    >>> for p in Point(3, 4), Point(14, 5/7.):
     758            print p
     759    Point: x= 3.000  y= 4.000  hypot= 5.000
     760    Point: x=14.000  y= 0.714  hypot=14.018
     761
     762The subclass shown above sets ``__slots__`` to an empty tuple.  This helps
     763keep memory requirements low by preventing the creation of instance dictionaries.
     764
     765Subclassing is not useful for adding new, stored fields.  Instead, simply
     766create a new named tuple type from the :attr:`_fields` attribute:
     767
     768    >>> Point3D = namedtuple('Point3D', Point._fields + ('z',))
     769
     770Default values can be implemented by using :meth:`_replace` to
     771customize a prototype instance:
     772
     773    >>> Account = namedtuple('Account', 'owner balance transaction_count')
     774    >>> default_account = Account('<owner name>', 0.0, 0)
     775    >>> johns_account = default_account._replace(owner='John')
     776
     777Enumerated constants can be implemented with named tuples, but it is simpler
     778and more efficient to use a simple class declaration:
     779
     780    >>> Status = namedtuple('Status', 'open pending closed')._make(range(3))
     781    >>> Status.open, Status.pending, Status.closed
     782    (0, 1, 2)
     783    >>> class Status:
     784            open, pending, closed = range(3)
     785
     786.. seealso::
     787
     788   `Named tuple recipe <http://code.activestate.com/recipes/500261/>`_
     789   adapted for Python 2.4.
     790
     791
     792:class:`OrderedDict` objects
     793----------------------------
     794
     795Ordered dictionaries are just like regular dictionaries but they remember the
     796order that items were inserted.  When iterating over an ordered dictionary,
     797the items are returned in the order their keys were first added.
     798
     799.. class:: OrderedDict([items])
     800
     801   Return an instance of a dict subclass, supporting the usual :class:`dict`
     802   methods.  An *OrderedDict* is a dict that remembers the order that keys
     803   were first inserted. If a new entry overwrites an existing entry, the
     804   original insertion position is left unchanged.  Deleting an entry and
     805   reinserting it will move it to the end.
     806
     807   .. versionadded:: 2.7
     808
     809.. method:: OrderedDict.popitem(last=True)
     810
     811   The :meth:`popitem` method for ordered dictionaries returns and removes
     812   a (key, value) pair.  The pairs are returned in LIFO order if *last* is
     813   true or FIFO order if false.
     814
     815In addition to the usual mapping methods, ordered dictionaries also support
     816reverse iteration using :func:`reversed`.
     817
     818Equality tests between :class:`OrderedDict` objects are order-sensitive
     819and are implemented as ``list(od1.items())==list(od2.items())``.
     820Equality tests between :class:`OrderedDict` objects and other
     821:class:`Mapping` objects are order-insensitive like regular
     822dictionaries.  This allows :class:`OrderedDict` objects to be substituted
     823anywhere a regular dictionary is used.
     824
     825The :class:`OrderedDict` constructor and :meth:`update` method both accept
     826keyword arguments, but their order is lost because Python's function call
     827semantics pass-in keyword arguments using a regular unordered dictionary.
     828
     829.. seealso::
     830
     831   `Equivalent OrderedDict recipe <http://code.activestate.com/recipes/576693/>`_
     832   that runs on Python 2.4 or later.
     833
     834:class:`OrderedDict` Examples and Recipes
     835^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     836
     837Since an ordered dictionary remembers its insertion order, it can be used
     838in conjuction with sorting to make a sorted dictionary::
     839
     840    >>> # regular unsorted dictionary
     841    >>> d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}
     842
     843    >>> # dictionary sorted by key
     844    >>> OrderedDict(sorted(d.items(), key=lambda t: t[0]))
     845    OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])
     846
     847    >>> # dictionary sorted by value
     848    >>> OrderedDict(sorted(d.items(), key=lambda t: t[1]))
     849    OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])
     850
     851    >>> # dictionary sorted by length of the key string
     852    >>> OrderedDict(sorted(d.items(), key=lambda t: len(t[0])))
     853    OrderedDict([('pear', 1), ('apple', 4), ('orange', 2), ('banana', 3)])
     854
     855The new sorted dictionaries maintain their sort order when entries
     856are deleted.  But when new keys are added, the keys are appended
     857to the end and the sort is not maintained.
     858
     859It is also straight-forward to create an ordered dictionary variant
     860that remembers the order the keys were *last* inserted.
     861If a new entry overwrites an existing entry, the
     862original insertion position is changed and moved to the end::
     863
     864    class LastUpdatedOrderedDict(OrderedDict):
     865        'Store items in the order the keys were last added'
     866
     867        def __setitem__(self, key, value):
     868            if key in self:
     869                del self[key]
     870            OrderedDict.__setitem__(self, key, value)
     871
     872An ordered dictionary can be combined with the :class:`Counter` class
     873so that the counter remembers the order elements are first encountered::
     874
     875   class OrderedCounter(Counter, OrderedDict):
     876        'Counter that remembers the order elements are first encountered'
     877
     878        def __repr__(self):
     879            return '%s(%r)' % (self.__class__.__name__, OrderedDict(self))
     880
     881        def __reduce__(self):
     882            return self.__class__, (OrderedDict(self),)
     883
     884
     885.. _collections-abstract-base-classes:
     886
     887Collections Abstract Base Classes
     888---------------------------------
     889
     890The collections module offers the following :term:`ABCs <abstract base class>`:
    48891
    49892=========================  =====================  ======================  ====================================================
    50 ABC                        Inherits               Abstract Methods        Mixin Methods
     893ABC                        Inherits from          Abstract Methods        Mixin Methods
    51894=========================  =====================  ======================  ====================================================
    52895:class:`Container`                                ``__contains__``
     
    57900:class:`Callable`                                 ``__call__``
    58901
    59 :class:`Sequence`          :class:`Sized`,        ``__getitem__``         ``__contains__``. ``__iter__``, ``__reversed__``.
    60                            :class:`Iterable`,                             ``index``, and ``count``
     902:class:`Sequence`          :class:`Sized`,        ``__getitem__``,        ``__contains__``, ``__iter__``, ``__reversed__``,
     903                           :class:`Iterable`,     ``__len__``             ``index``, and ``count``
    61904                           :class:`Container`
    62905
    63 :class:`MutableSequence`   :class:`Sequence`      ``__setitem__``         Inherited Sequence methods and
    64                                                   ``__delitem__``,        ``append``, ``reverse``, ``extend``, ``pop``,
    65                                                   and ``insert``          ``remove``, and ``__iadd__``
    66 
    67 :class:`Set`               :class:`Sized`,                                ``__le__``, ``__lt__``, ``__eq__``, ``__ne__``,
    68                            :class:`Iterable`,                             ``__gt__``, ``__ge__``, ``__and__``, ``__or__``
    69                            :class:`Container`                             ``__sub__``, ``__xor__``, and ``isdisjoint``
    70 
    71 :class:`MutableSet`        :class:`Set`           ``add`` and             Inherited Set methods and
    72                                                   ``discard``             ``clear``, ``pop``, ``remove``, ``__ior__``,
    73                                                                           ``__iand__``, ``__ixor__``, and ``__isub__``
    74 
    75 :class:`Mapping`           :class:`Sized`,        ``__getitem__``         ``__contains__``, ``keys``, ``items``, ``values``,
    76                            :class:`Iterable`,                             ``get``, ``__eq__``, and ``__ne__``
    77                            :class:`Container`
    78 
    79 :class:`MutableMapping`    :class:`Mapping`       ``__setitem__`` and     Inherited Mapping methods and
    80                                                   ``__delitem__``         ``pop``, ``popitem``, ``clear``, ``update``,
    81                                                                           and ``setdefault``
     906:class:`MutableSequence`   :class:`Sequence`      ``__getitem__``,        Inherited :class:`Sequence` methods and
     907                                                  ``__setitem__``,        ``append``, ``reverse``, ``extend``, ``pop``,
     908                                                  ``__delitem__``,        ``remove``, and ``__iadd__``
     909                                                  ``__len__``,
     910                                                  ``insert``
     911
     912:class:`Set`               :class:`Sized`,        ``__contains__``,       ``__le__``, ``__lt__``, ``__eq__``, ``__ne__``,
     913                           :class:`Iterable`,     ``__iter__``,           ``__gt__``, ``__ge__``, ``__and__``, ``__or__``,
     914                           :class:`Container`     ``__len__``             ``__sub__``, ``__xor__``, and ``isdisjoint``
     915
     916:class:`MutableSet`        :class:`Set`           ``__contains__``,       Inherited :class:`Set` methods and
     917                                                  ``__iter__``,           ``clear``, ``pop``, ``remove``, ``__ior__``,
     918                                                  ``__len__``,            ``__iand__``, ``__ixor__``, and ``__isub__``
     919                                                  ``add``,
     920                                                  ``discard``
     921
     922:class:`Mapping`           :class:`Sized`,        ``__getitem__``,        ``__contains__``, ``keys``, ``items``, ``values``,
     923                           :class:`Iterable`,     ``__iter__``,           ``get``, ``__eq__``, and ``__ne__``
     924                           :class:`Container`     ``__len__``
     925
     926:class:`MutableMapping`    :class:`Mapping`       ``__getitem__``,        Inherited :class:`Mapping` methods and
     927                                                  ``__setitem__``,        ``pop``, ``popitem``, ``clear``, ``update``,
     928                                                  ``__delitem__``,        and ``setdefault``
     929                                                  ``__iter__``,
     930                                                  ``__len__``
    82931
    83932
    84933:class:`MappingView`       :class:`Sized`                                 ``__len__``
     934:class:`ItemsView`         :class:`MappingView`,                          ``__contains__``,
     935                           :class:`Set`                                   ``__iter__``
    85936:class:`KeysView`          :class:`MappingView`,                          ``__contains__``,
    86                            :class:`Set`                                   ``__iter__``
    87 :class:`ItemsView`         :class:`MappingView`,                          ``__contains__``,
    88937                           :class:`Set`                                   ``__iter__``
    89938:class:`ValuesView`        :class:`MappingView`                           ``__contains__``, ``__iter__``
    90939=========================  =====================  ======================  ====================================================
     940
     941
     942.. class:: Container
     943           Hashable
     944           Sized
     945           Callable
     946
     947   ABCs for classes that provide respectively the methods :meth:`__contains__`,
     948   :meth:`__hash__`, :meth:`__len__`, and :meth:`__call__`.
     949
     950.. class:: Iterable
     951
     952   ABC for classes that provide the :meth:`__iter__` method.
     953   See also the definition of :term:`iterable`.
     954
     955.. class:: Iterator
     956
     957   ABC for classes that provide the :meth:`__iter__` and :meth:`next` methods.
     958   See also the definition of :term:`iterator`.
     959
     960.. class:: Sequence
     961           MutableSequence
     962
     963   ABCs for read-only and mutable :term:`sequences <sequence>`.
     964
     965.. class:: Set
     966           MutableSet
     967
     968   ABCs for read-only and mutable sets.
     969
     970.. class:: Mapping
     971           MutableMapping
     972
     973   ABCs for read-only and mutable :term:`mappings <mapping>`.
     974
     975.. class:: MappingView
     976           ItemsView
     977           KeysView
     978           ValuesView
     979
     980   ABCs for mapping, items, keys, and values :term:`views <view>`.
     981
    91982
    92983These ABCs allow us to ask classes or instances if they provide
     
    1321023   :meth:`_from_iterable` which calls ``cls(iterable)`` to produce a new set.
    1331024   If the :class:`Set` mixin is being used in a class with a different
    134    constructor signature, you will need to override :meth:`from_iterable`
     1025   constructor signature, you will need to override :meth:`_from_iterable`
    1351026   with a classmethod that can construct new instances from
    1361027   an iterable argument.
     
    1541045
    1551046   * For more about ABCs, see the :mod:`abc` module and :pep:`3119`.
    156 
    157 
    158 :class:`deque` objects
    159 ----------------------
    160 
    161 .. class:: deque([iterable[, maxlen]])
    162 
    163    Returns a new deque object initialized left-to-right (using :meth:`append`) with
    164    data from *iterable*.  If *iterable* is not specified, the new deque is empty.
    165 
    166    Deques are a generalization of stacks and queues (the name is pronounced "deck"
    167    and is short for "double-ended queue").  Deques support thread-safe, memory
    168    efficient appends and pops from either side of the deque with approximately the
    169    same O(1) performance in either direction.
    170 
    171    Though :class:`list` objects support similar operations, they are optimized for
    172    fast fixed-length operations and incur O(n) memory movement costs for
    173    ``pop(0)`` and ``insert(0, v)`` operations which change both the size and
    174    position of the underlying data representation.
    175 
    176    .. versionadded:: 2.4
    177 
    178    If *maxlen* is not specified or is *None*, deques may grow to an
    179    arbitrary length.  Otherwise, the deque is bounded to the specified maximum
    180    length.  Once a bounded length deque is full, when new items are added, a
    181    corresponding number of items are discarded from the opposite end.  Bounded
    182    length deques provide functionality similar to the ``tail`` filter in
    183    Unix. They are also useful for tracking transactions and other pools of data
    184    where only the most recent activity is of interest.
    185 
    186    .. versionchanged:: 2.6
    187       Added *maxlen* parameter.
    188 
    189    Deque objects support the following methods:
    190 
    191 
    192    .. method:: append(x)
    193 
    194       Add *x* to the right side of the deque.
    195 
    196 
    197    .. method:: appendleft(x)
    198 
    199       Add *x* to the left side of the deque.
    200 
    201 
    202    .. method:: clear()
    203 
    204       Remove all elements from the deque leaving it with length 0.
    205 
    206 
    207    .. method:: extend(iterable)
    208 
    209       Extend the right side of the deque by appending elements from the iterable
    210       argument.
    211 
    212 
    213    .. method:: extendleft(iterable)
    214 
    215       Extend the left side of the deque by appending elements from *iterable*.
    216       Note, the series of left appends results in reversing the order of
    217       elements in the iterable argument.
    218 
    219 
    220    .. method:: pop()
    221 
    222       Remove and return an element from the right side of the deque. If no
    223       elements are present, raises an :exc:`IndexError`.
    224 
    225 
    226    .. method:: popleft()
    227 
    228       Remove and return an element from the left side of the deque. If no
    229       elements are present, raises an :exc:`IndexError`.
    230 
    231 
    232    .. method:: remove(value)
    233 
    234       Removed the first occurrence of *value*.  If not found, raises a
    235       :exc:`ValueError`.
    236 
    237       .. versionadded:: 2.5
    238 
    239 
    240    .. method:: rotate(n)
    241 
    242       Rotate the deque *n* steps to the right.  If *n* is negative, rotate to
    243       the left.  Rotating one step to the right is equivalent to:
    244       ``d.appendleft(d.pop())``.
    245 
    246 
    247 In addition to the above, deques support iteration, pickling, ``len(d)``,
    248 ``reversed(d)``, ``copy.copy(d)``, ``copy.deepcopy(d)``, membership testing with
    249 the :keyword:`in` operator, and subscript references such as ``d[-1]``.  Indexed
    250 access is O(1) at both ends but slows to O(n) in the middle.  For fast random
    251 access, use lists instead.
    252 
    253 Example:
    254 
    255 .. doctest::
    256 
    257    >>> from collections import deque
    258    >>> d = deque('ghi')                 # make a new deque with three items
    259    >>> for elem in d:                   # iterate over the deque's elements
    260    ...     print elem.upper()
    261    G
    262    H
    263    I
    264 
    265    >>> d.append('j')                    # add a new entry to the right side
    266    >>> d.appendleft('f')                # add a new entry to the left side
    267    >>> d                                # show the representation of the deque
    268    deque(['f', 'g', 'h', 'i', 'j'])
    269 
    270    >>> d.pop()                          # return and remove the rightmost item
    271    'j'
    272    >>> d.popleft()                      # return and remove the leftmost item
    273    'f'
    274    >>> list(d)                          # list the contents of the deque
    275    ['g', 'h', 'i']
    276    >>> d[0]                             # peek at leftmost item
    277    'g'
    278    >>> d[-1]                            # peek at rightmost item
    279    'i'
    280 
    281    >>> list(reversed(d))                # list the contents of a deque in reverse
    282    ['i', 'h', 'g']
    283    >>> 'h' in d                         # search the deque
    284    True
    285    >>> d.extend('jkl')                  # add multiple elements at once
    286    >>> d
    287    deque(['g', 'h', 'i', 'j', 'k', 'l'])
    288    >>> d.rotate(1)                      # right rotation
    289    >>> d
    290    deque(['l', 'g', 'h', 'i', 'j', 'k'])
    291    >>> d.rotate(-1)                     # left rotation
    292    >>> d
    293    deque(['g', 'h', 'i', 'j', 'k', 'l'])
    294 
    295    >>> deque(reversed(d))               # make a new deque in reverse order
    296    deque(['l', 'k', 'j', 'i', 'h', 'g'])
    297    >>> d.clear()                        # empty the deque
    298    >>> d.pop()                          # cannot pop from an empty deque
    299    Traceback (most recent call last):
    300      File "<pyshell#6>", line 1, in -toplevel-
    301        d.pop()
    302    IndexError: pop from an empty deque
    303 
    304    >>> d.extendleft('abc')              # extendleft() reverses the input order
    305    >>> d
    306    deque(['c', 'b', 'a'])
    307 
    308 
    309 :class:`deque` Recipes
    310 ^^^^^^^^^^^^^^^^^^^^^^
    311 
    312 This section shows various approaches to working with deques.
    313 
    314 Bounded length deques provide functionality similar to the ``tail`` filter
    315 in Unix::
    316 
    317    def tail(filename, n=10):
    318        'Return the last n lines of a file'
    319        return deque(open(filename), n)
    320 
    321 Another approach to using deques is to maintain a sequence of recently
    322 added elements by appending to the right and popping to the left::
    323 
    324     def moving_average(iterable, n=3):
    325         # moving_average([40, 30, 50, 46, 39, 44]) --> 40.0 42.0 45.0 43.0
    326         # http://en.wikipedia.org/wiki/Moving_average
    327         it = iter(iterable)
    328         d = deque(itertools.islice(it, n-1))
    329         d.appendleft(0)
    330         s = sum(d)
    331         for elem in it:
    332             s += elem - d.popleft()
    333             d.append(elem)
    334             yield s / float(n)
    335 
    336 The :meth:`rotate` method provides a way to implement :class:`deque` slicing and
    337 deletion.  For example, a pure Python implementation of ``del d[n]`` relies on
    338 the :meth:`rotate` method to position elements to be popped::
    339 
    340    def delete_nth(d, n):
    341        d.rotate(-n)
    342        d.popleft()
    343        d.rotate(n)
    344 
    345 To implement :class:`deque` slicing, use a similar approach applying
    346 :meth:`rotate` to bring a target element to the left side of the deque. Remove
    347 old entries with :meth:`popleft`, add new entries with :meth:`extend`, and then
    348 reverse the rotation.
    349 With minor variations on that approach, it is easy to implement Forth style
    350 stack manipulations such as ``dup``, ``drop``, ``swap``, ``over``, ``pick``,
    351 ``rot``, and ``roll``.
    352 
    353 
    354 :class:`defaultdict` objects
    355 ----------------------------
    356 
    357 .. class:: defaultdict([default_factory[, ...]])
    358 
    359    Returns a new dictionary-like object.  :class:`defaultdict` is a subclass of the
    360    built-in :class:`dict` class.  It overrides one method and adds one writable
    361    instance variable.  The remaining functionality is the same as for the
    362    :class:`dict` class and is not documented here.
    363 
    364    The first argument provides the initial value for the :attr:`default_factory`
    365    attribute; it defaults to ``None``. All remaining arguments are treated the same
    366    as if they were passed to the :class:`dict` constructor, including keyword
    367    arguments.
    368 
    369    .. versionadded:: 2.5
    370 
    371    :class:`defaultdict` objects support the following method in addition to the
    372    standard :class:`dict` operations:
    373 
    374 
    375    .. method:: defaultdict.__missing__(key)
    376 
    377       If the :attr:`default_factory` attribute is ``None``, this raises a
    378       :exc:`KeyError` exception with the *key* as argument.
    379 
    380       If :attr:`default_factory` is not ``None``, it is called without arguments
    381       to provide a default value for the given *key*, this value is inserted in
    382       the dictionary for the *key*, and returned.
    383 
    384       If calling :attr:`default_factory` raises an exception this exception is
    385       propagated unchanged.
    386 
    387       This method is called by the :meth:`__getitem__` method of the
    388       :class:`dict` class when the requested key is not found; whatever it
    389       returns or raises is then returned or raised by :meth:`__getitem__`.
    390 
    391 
    392    :class:`defaultdict` objects support the following instance variable:
    393 
    394 
    395    .. attribute:: defaultdict.default_factory
    396 
    397       This attribute is used by the :meth:`__missing__` method; it is
    398       initialized from the first argument to the constructor, if present, or to
    399       ``None``, if absent.
    400 
    401 
    402 :class:`defaultdict` Examples
    403 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    404 
    405 Using :class:`list` as the :attr:`default_factory`, it is easy to group a
    406 sequence of key-value pairs into a dictionary of lists:
    407 
    408    >>> s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
    409    >>> d = defaultdict(list)
    410    >>> for k, v in s:
    411    ...     d[k].append(v)
    412    ...
    413    >>> d.items()
    414    [('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
    415 
    416 When each key is encountered for the first time, it is not already in the
    417 mapping; so an entry is automatically created using the :attr:`default_factory`
    418 function which returns an empty :class:`list`.  The :meth:`list.append`
    419 operation then attaches the value to the new list.  When keys are encountered
    420 again, the look-up proceeds normally (returning the list for that key) and the
    421 :meth:`list.append` operation adds another value to the list. This technique is
    422 simpler and faster than an equivalent technique using :meth:`dict.setdefault`:
    423 
    424    >>> d = {}
    425    >>> for k, v in s:
    426    ...     d.setdefault(k, []).append(v)
    427    ...
    428    >>> d.items()
    429    [('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
    430 
    431 Setting the :attr:`default_factory` to :class:`int` makes the
    432 :class:`defaultdict` useful for counting (like a bag or multiset in other
    433 languages):
    434 
    435    >>> s = 'mississippi'
    436    >>> d = defaultdict(int)
    437    >>> for k in s:
    438    ...     d[k] += 1
    439    ...
    440    >>> d.items()
    441    [('i', 4), ('p', 2), ('s', 4), ('m', 1)]
    442 
    443 When a letter is first encountered, it is missing from the mapping, so the
    444 :attr:`default_factory` function calls :func:`int` to supply a default count of
    445 zero.  The increment operation then builds up the count for each letter.
    446 
    447 The function :func:`int` which always returns zero is just a special case of
    448 constant functions.  A faster and more flexible way to create constant functions
    449 is to use :func:`itertools.repeat` which can supply any constant value (not just
    450 zero):
    451 
    452    >>> def constant_factory(value):
    453    ...     return itertools.repeat(value).next
    454    >>> d = defaultdict(constant_factory('<missing>'))
    455    >>> d.update(name='John', action='ran')
    456    >>> '%(name)s %(action)s to %(object)s' % d
    457    'John ran to <missing>'
    458 
    459 Setting the :attr:`default_factory` to :class:`set` makes the
    460 :class:`defaultdict` useful for building a dictionary of sets:
    461 
    462    >>> s = [('red', 1), ('blue', 2), ('red', 3), ('blue', 4), ('red', 1), ('blue', 4)]
    463    >>> d = defaultdict(set)
    464    >>> for k, v in s:
    465    ...     d[k].add(v)
    466    ...
    467    >>> d.items()
    468    [('blue', set([2, 4])), ('red', set([1, 3]))]
    469 
    470 
    471 :func:`namedtuple` Factory Function for Tuples with Named Fields
    472 ----------------------------------------------------------------
    473 
    474 Named tuples assign meaning to each position in a tuple and allow for more readable,
    475 self-documenting code.  They can be used wherever regular tuples are used, and
    476 they add the ability to access fields by name instead of position index.
    477 
    478 .. function:: namedtuple(typename, field_names, [verbose])
    479 
    480    Returns a new tuple subclass named *typename*.  The new subclass is used to
    481    create tuple-like objects that have fields accessible by attribute lookup as
    482    well as being indexable and iterable.  Instances of the subclass also have a
    483    helpful docstring (with typename and field_names) and a helpful :meth:`__repr__`
    484    method which lists the tuple contents in a ``name=value`` format.
    485 
    486    The *field_names* are a single string with each fieldname separated by whitespace
    487    and/or commas, for example ``'x y'`` or ``'x, y'``.  Alternatively, *field_names*
    488    can be a sequence of strings such as ``['x', 'y']``.
    489 
    490    Any valid Python identifier may be used for a fieldname except for names
    491    starting with an underscore.  Valid identifiers consist of letters, digits,
    492    and underscores but do not start with a digit or underscore and cannot be
    493    a :mod:`keyword` such as *class*, *for*, *return*, *global*, *pass*, *print*,
    494    or *raise*.
    495 
    496    If *verbose* is true, the class definition is printed just before being built.
    497 
    498    Named tuple instances do not have per-instance dictionaries, so they are
    499    lightweight and require no more memory than regular tuples.
    500 
    501    .. versionadded:: 2.6
    502 
    503 Example:
    504 
    505 .. doctest::
    506    :options: +NORMALIZE_WHITESPACE
    507 
    508    >>> Point = namedtuple('Point', 'x y')
    509    >>> p = Point(11, y=22)     # instantiate with positional or keyword arguments
    510    >>> p[0] + p[1]             # indexable like the plain tuple (11, 22)
    511    33
    512    >>> x, y = p                # unpack like a regular tuple
    513    >>> x, y
    514    (11, 22)
    515    >>> p.x + p.y               # fields also accessible by name
    516    33
    517    >>> p                       # readable __repr__ with a name=value style
    518    Point(x=11, y=22)
    519 
    520    >>> Point = namedtuple('Point', 'x y', verbose=True) # show the class definition
    521    class Point(tuple):
    522            'Point(x, y)'
    523    <BLANKLINE>
    524            __slots__ = ()
    525    <BLANKLINE>
    526            _fields = ('x', 'y')
    527    <BLANKLINE>
    528            def __new__(_cls, x, y):
    529                return _tuple.__new__(_cls, (x, y))
    530    <BLANKLINE>
    531            @classmethod
    532            def _make(cls, iterable, new=tuple.__new__, len=len):
    533                'Make a new Point object from a sequence or iterable'
    534                result = new(cls, iterable)
    535                if len(result) != 2:
    536                    raise TypeError('Expected 2 arguments, got %d' % len(result))
    537                return result
    538    <BLANKLINE>
    539            def __repr__(self):
    540                return 'Point(x=%r, y=%r)' % self
    541    <BLANKLINE>
    542            def _asdict(t):
    543                'Return a new dict which maps field names to their values'
    544                return {'x': t[0], 'y': t[1]}
    545    <BLANKLINE>
    546            def _replace(_self, **kwds):
    547                'Return a new Point object replacing specified fields with new values'
    548                result = _self._make(map(kwds.pop, ('x', 'y'), _self))
    549                if kwds:
    550                    raise ValueError('Got unexpected field names: %r' % kwds.keys())
    551                return result
    552    <BLANKLINE>
    553            def __getnewargs__(self):
    554                return tuple(self)
    555    <BLANKLINE>
    556            x = _property(_itemgetter(0))
    557            y = _property(_itemgetter(1))
    558 
    559 Named tuples are especially useful for assigning field names to result tuples returned
    560 by the :mod:`csv` or :mod:`sqlite3` modules::
    561 
    562    EmployeeRecord = namedtuple('EmployeeRecord', 'name, age, title, department, paygrade')
    563 
    564    import csv
    565    for emp in map(EmployeeRecord._make, csv.reader(open("employees.csv", "rb"))):
    566        print emp.name, emp.title
    567 
    568    import sqlite3
    569    conn = sqlite3.connect('/companydata')
    570    cursor = conn.cursor()
    571    cursor.execute('SELECT name, age, title, department, paygrade FROM employees')
    572    for emp in map(EmployeeRecord._make, cursor.fetchall()):
    573        print emp.name, emp.title
    574 
    575 In addition to the methods inherited from tuples, named tuples support
    576 three additional methods and one attribute.  To prevent conflicts with
    577 field names, the method and attribute names start with an underscore.
    578 
    579 .. method:: somenamedtuple._make(iterable)
    580 
    581    Class method that makes a new instance from an existing sequence or iterable.
    582 
    583    .. doctest::
    584 
    585       >>> t = [11, 22]
    586       >>> Point._make(t)
    587       Point(x=11, y=22)
    588 
    589 .. method:: somenamedtuple._asdict()
    590 
    591    Return a new dict which maps field names to their corresponding values::
    592 
    593       >>> p._asdict()
    594       {'x': 11, 'y': 22}
    595 
    596 .. method:: somenamedtuple._replace(kwargs)
    597 
    598    Return a new instance of the named tuple replacing specified fields with new
    599    values::
    600 
    601       >>> p = Point(x=11, y=22)
    602       >>> p._replace(x=33)
    603       Point(x=33, y=22)
    604 
    605       >>> for partnum, record in inventory.items():
    606       ...     inventory[partnum] = record._replace(price=newprices[partnum], timestamp=time.now())
    607 
    608 .. attribute:: somenamedtuple._fields
    609 
    610    Tuple of strings listing the field names.  Useful for introspection
    611    and for creating new named tuple types from existing named tuples.
    612 
    613    .. doctest::
    614 
    615       >>> p._fields            # view the field names
    616       ('x', 'y')
    617 
    618       >>> Color = namedtuple('Color', 'red green blue')
    619       >>> Pixel = namedtuple('Pixel', Point._fields + Color._fields)
    620       >>> Pixel(11, 22, 128, 255, 0)
    621       Pixel(x=11, y=22, red=128, green=255, blue=0)
    622 
    623 To retrieve a field whose name is stored in a string, use the :func:`getattr`
    624 function:
    625 
    626     >>> getattr(p, 'x')
    627     11
    628 
    629 To convert a dictionary to a named tuple, use the double-star-operator
    630 (as described in :ref:`tut-unpacking-arguments`):
    631 
    632    >>> d = {'x': 11, 'y': 22}
    633    >>> Point(**d)
    634    Point(x=11, y=22)
    635 
    636 Since a named tuple is a regular Python class, it is easy to add or change
    637 functionality with a subclass.  Here is how to add a calculated field and
    638 a fixed-width print format:
    639 
    640     >>> class Point(namedtuple('Point', 'x y')):
    641     ...     __slots__ = ()
    642     ...     @property
    643     ...     def hypot(self):
    644     ...         return (self.x ** 2 + self.y ** 2) ** 0.5
    645     ...     def __str__(self):
    646     ...         return 'Point: x=%6.3f  y=%6.3f  hypot=%6.3f' % (self.x, self.y, self.hypot)
    647 
    648     >>> for p in Point(3, 4), Point(14, 5/7.):
    649     ...     print p
    650     Point: x= 3.000  y= 4.000  hypot= 5.000
    651     Point: x=14.000  y= 0.714  hypot=14.018
    652 
    653 The subclass shown above sets ``__slots__`` to an empty tuple.  This keeps
    654 keep memory requirements low by preventing the creation of instance dictionaries.
    655 
    656 Subclassing is not useful for adding new, stored fields.  Instead, simply
    657 create a new named tuple type from the :attr:`_fields` attribute:
    658 
    659     >>> Point3D = namedtuple('Point3D', Point._fields + ('z',))
    660 
    661 Default values can be implemented by using :meth:`_replace` to
    662 customize a prototype instance:
    663 
    664     >>> Account = namedtuple('Account', 'owner balance transaction_count')
    665     >>> default_account = Account('<owner name>', 0.0, 0)
    666     >>> johns_account = default_account._replace(owner='John')
    667 
    668 Enumerated constants can be implemented with named tuples, but it is simpler
    669 and more efficient to use a simple class declaration:
    670 
    671     >>> Status = namedtuple('Status', 'open pending closed')._make(range(3))
    672     >>> Status.open, Status.pending, Status.closed
    673     (0, 1, 2)
    674     >>> class Status:
    675     ...     open, pending, closed = range(3)
    676 
    677 .. seealso::
    678 
    679    `Named tuple recipe <http://code.activestate.com/recipes/500261/>`_
    680    adapted for Python 2.4.
Note: See TracChangeset for help on using the changeset viewer.