"specialdict" module

Georg Brandl g.brandl at gmx.net
Mon Apr 4 11:27:46 EDT 2005


Michael Spencer wrote:
> Georg Brandl wrote:
> 
>> 
>> I think I like Jeff's approach more (defaultvalues are just special
>> cases of default factories); there aren't many "hoops" required.
>> Apart from that, the names just get longer ;)
> 
> Yes Jeff's approach does simplify the implementation and more-or-less eliminates 
> my complexity objection
> 
> But why do you write:
> 
>      def __getitem__(self, key):
>          try:
>              return super(defaultdict, self).__getitem__(key)
>          except KeyError, err:
>              try:
>                  return self.setdefault(key,
>                            self._default[0](*self._default[1],
>                                             **self._default[2]))
>              except KeyError:
>                  raise err
> 
> rather than:
> 
>      def __getitem__(self, key):
>          return self.setdefault(key,
>                            self._default[0](*self._default[1],
>                                             **self._default[2]))
> 
> (which could catch AttributeError in the case of _default not set)
> I'm sure there's a reason, but I can't see it.

In your version, the default factory is called every time a value is
retrieved, which might be a performance problem.

>>>Alternatively, you could provide factory functions to construct the defaultdict. 
>>>  Someone (Michele?) recently posted an implementation of this
>> 
>> 
>> Yes, I think this could be reasonable.
> 
> 
> ...though this would more naturally complement a fixed-default dictionary IMO
> Your design permits - even encourages (by providing convenient setters) the 
> default to change over the lifetime of the dictionary.  I'm not sure whether 
> that's good or bad, but it's a feature worth discussing.

It's certainly more in the spirit of Python -- we're consenting adults,
and so we are allowed to change the default.

mfg
Georg



More information about the Python-list mailing list