default behavior

John Posner jjposner at optimum.net
Mon Aug 2 23:00:51 EDT 2010


On 7/31/2010 1:31 PM, John Posner wrote:
>
> Caveat -- there's another description of defaultdict here:
>
> http://docs.python.org/library/collections.html#collections.defaultdict
>
> ... and it's bogus. This other description claims that __missing__ is a
> method of defaultdict, not of dict.

Following is a possible replacement for the bogus description. Comments 
welcome. I intend to submit a Python doc bug, and I'd like to have a 
clean alternative to propose.

--------------

class collections.defaultdict([default_factory[, ...]])

defaultdict is a dict subclass that can guarantee success on key 
lookups: if a key does not currently exist in a defaultdict object, a 
"default value factory" is called to provide a value for that key.  The 
"default value factory" is a callable object (typically, a function) 
that takes no arguments. You specify this callable as the first argument 
to defaultdict(). Additional defaultdict() arguments are the same as for 
dict().

The "default value factory" callable is stored as an attribute, 
default_factory, of the newly created defaultdict object. If you call 
defaultdict() with no arguments, or with None as the first argument, the 
default_factory attribute is set to None. You can reassign the 
default_factory attribute of an existing defaultdict object to another 
callable, or to None.

When a lookup of a non-existent key is performed in a defaultdict 
object, its default_factory attribute is evaluated, and the resulting 
object is called:

* If the call produces a value, that value is returned as the result of 
the lookup. In addition, the key-value pair is inserted into the 
defaultdict.

* If the call raises an exception, it is propagated unchanged.

* If the default_factory attribute evaluates to None, a KeyError 
exception is raised, with the non-existent key as its argument. (The 
defaultdict behaves exactly like a standard dict in this case.)




More information about the Python-list mailing list