mirror of
https://github.com/python/cpython.git
synced 2025-08-01 07:33:08 +00:00
Provide an example of defaultdict with non-zero constant factory function.
This commit is contained in:
parent
01b9881062
commit
bcc40ba922
1 changed files with 12 additions and 8 deletions
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue