[Python-Dev] Re: dict.setdefault() (Patch#101102)

Peter Funk pf@artcom-gmbh.de
Tue, 8 Aug 2000 16:48:32 +0200 (MEST)


Hi,

Tim Peters:
>     >> dict.getorset('hi', []).append(42)  # getorset is my favorite
> 
>     Peter> 'getorset' is a *MUCH* better name compared to 'default' or
>     Peter> 'setdefault'.
 
Skip Montanaro:
> Shouldn't that be getorsetandget?  After all, it doesn't just set or get it
> gets, but if it's undefined, it sets, then gets.

That would defeat the main purpose of this method: abbreviation.
This name is simply too long.

> I know I'll be shouted down, but I still vote against a method that both
> sets and gets dict values.  I don't think the abbreviation in the source is
> worth the obfuscation of the code.

Yes.  
But I got the impression that Patch#101102 can't be avoided any more.  
So in this situation Tims '.getorset()' is the lesser of two evils 
compared to '.default()' or '.setdefault()'.

BTW: 
I think the "informal" mapping interface should get a more
explicit documentation.  The language reference only mentions the
'len()' builtin method and indexing.  But the section about mappings
contains the sentence: "The extension modules dbm, gdbm, bsddb provide
additional examples of mapping types."

On the other hand section "2.1.6 Mapping Types" of the library reference
says: "The following operations are defined on mappings ..." and than
lists all methods including 'get()', 'update()', 'copy()' ...

Unfortunately only a small subset of these methods actually works on
a dbm mapping:

>>> import dbm
>>> d = dbm.open("piff", "c")
>>> d.get('foo', [])
Traceback (innermost last):
  File "<stdin>", line 1, in ?
  AttributeError: get
>>> d.copy()
Traceback (innermost last):
  File "<stdin>", line 1, in ?
  AttributeError: copy
   
That should be documented.

Regards, Peter