Matteo Dell'Amico wrote: > Kay Schluehr wrote: > > > Why do You set > > > > d.defaultValue(0) > > d.defaultValue(function=list) > > > > but not > > > > d.defaultValue(0) > > d.defaultValue([]) > > > > ? > > I think that's because you have to instantiate a different object for
> each different key. Otherwise, you would instantiate just one list as a > default value for *all* default values. Or the default value will be copied, which is not very hard either or type(self._default)() will be called. This is all equivalent and it does not matter ( except for performance reasons ) which way to go as long only one is selected. [...] > By the way, to really work, I think that Duncan's proposal should create > new objects when you try to access them, and to me it seems a bit > counterintuitive. If the dict has a fixed semantics by applying defaultValue() and it returns defaults instead of exceptions whenever a key is missing i.e. behavioural invariance the client of the dict has nothing to worry about, hasn't he? > > And why not dict(type=int), dict(type=list) instead where default > > values are instantiated during object creation? A consistent pythonic > > handling of all types should be envisioned not some ad hoc solutions > > that go deprecated two Python releases later. > > I don't really understand you. What should 'type' return? > A callable > that returns a new default value? That's exactly what Duncan proposed > with the "function" keyword argument. I suspect the proposal really makes sense only if the dict-values are of the same type. Filling it with strings, custom objects and other stuff and receiving 0 or [] or '' if a key is missing would be a surprise - at least for me. Instantiating dict the way I proposed indicates type-guards! This is the reason why I want to delay this issue and discuss it in a broader context. But I'm also undecided. Guidos Python-3000 musings are in danger to become vaporware. "Now is better then never"... Therefore +0. Regards Kay -- http://mail.python.org/mailman/listinfo/python-list