]> granicus.if.org Git - python/commitdiff
Provide an example of defaultdict with non-zero constant factory function.
authorRaymond Hettinger <python@rcn.com>
Mon, 19 Feb 2007 09:14:10 +0000 (09:14 +0000)
committerRaymond Hettinger <python@rcn.com>
Mon, 19 Feb 2007 09:14:10 +0000 (09:14 +0000)
Doc/lib/libcollections.tex

index 3e56a3e965d85c9d9987eae3fa2da37074d0b2c4..a763e31bfecaff497b3d931e98c965cd58eee76d 100644 (file)
@@ -311,16 +311,20 @@ languages):
 When a letter is first encountered, it is missing from the mapping, so the
 \member{default_factory} function calls \function{int()} to supply a default
 count of zero.  The increment operation then builds up the count for each
-letter. This technique makes counting simpler and faster than an equivalent
-technique using \method{dict.get()}:
+letter.
 
-\begin{verbatim}
->>> d = {}
->>> for k in s:
-       d[k] = d.get(k, 0) + 1
+The function \function{int()} which always returns zero is just a special
+case of constant functions.  A faster and more flexible way to create
+constant functions is to use \function{itertools.repeat()} which can supply
+any constant value (not just zero):
 
->>> d.items()
-[('i', 4), ('p', 2), ('s', 4), ('m', 1)]
+\begin{verbatim}
+>>> def constant_factory(value):
+...     return itertools.repeat(value).next
+>>> d = defaultdict(constant_factory('<missing>'))
+>>> d.update(name='John', action='ran')
+>>> '%(name)s %(action)s to %(object)s' % d
+'John ran to <missing>'
 \end{verbatim}
 
 Setting the \member{default_factory} to \class{set} makes the