Provide an example of defaultdict with non-zero constant factory function.

This commit is contained in:
Raymond Hettinger 2007-02-19 09:14:10 +00:00
parent 01b9881062
commit bcc40ba922

View file

@ -311,16 +311,20 @@ languages):
When a letter is first encountered, it is missing from the mapping, so the 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 \member{default_factory} function calls \function{int()} to supply a default
count of zero. The increment operation then builds up the count for each count of zero. The increment operation then builds up the count for each
letter. This technique makes counting simpler and faster than an equivalent letter.
technique using \method{dict.get()}:
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):
\begin{verbatim} \begin{verbatim}
>>> d = {} >>> def constant_factory(value):
>>> for k in s: ... return itertools.repeat(value).next
d[k] = d.get(k, 0) + 1 >>> d = defaultdict(constant_factory('<missing>'))
>>> d.update(name='John', action='ran')
>>> d.items() >>> '%(name)s %(action)s to %(object)s' % d
[('i', 4), ('p', 2), ('s', 4), ('m', 1)] 'John ran to <missing>'
\end{verbatim} \end{verbatim}
Setting the \member{default_factory} to \class{set} makes the Setting the \member{default_factory} to \class{set} makes the