[Tim Peters]
Dang! I may have just found a use, in Zope's lib/python/docutils/parsers/rst/directives/images.py (which is part of docutils, not really part of Zope):
figwidth = options.setdefault('figwidth') figclass = options.setdefault('figclass') del options['figwidth'] del options['figclass']
[David Goodger]
If a feature is available, it *will* eventually be used! Whose law is that?
This is a different law, about design mistakes getting used by people who should know better ;-)
The code needs to store the values of certain dict entries, then delete them. This is because the "options" dict is passed on to another function, where those entries are not welcome. The code above is simply shorter than this:
if options.has_key('figwidth'): figwidth = options['figwidth'] del options['figwidth'] # again for 'figclass'
Alternatively,
try: figwidth = options['figwidth'] del options['figwidth'] except KeyError: pass
Those wouldn't work in context, because they leave figwidth unbound if it's not a key in options. Later code unconditionally references fidgwidth.
It saves between one line and three lines of code per entry. But since those entries are probably not so common, it would actually be faster to use one of the above patterns.
Changing figwidth = options.setdefault('figwidth') figclass = options.setdefault('figclass') to figwidth = options.setdefault('figwidth', None) figclass = options.setdefault('figclass', None) is a minimal semantics-neutral edit to avoid the unloved 1-argument case.
Assuming options is a dict-like thingie, it probably meant to do:
figwidth = options.pop('figwidth', None) figclass = options.pop('figclass', None)
Yes, but the "pop" method was only added in Python 2.3. Docutils currently maintains compatibility with Python 2.1, so that's RIGHT OUT!
Oh, stop torturing yourself. Nobody uses Python 2.1 anymore ;-)
David, are you married to that bizarre use of setdefault <wink>?
No, not at all. In fact, I will vehemently deny that I ever wrote such code, and will continue to do so until someone looks up its history and proves that I'm guilty, which I probably am.
No, I checked, and this code was actually added by an Asian spammer, who polluted the docutils codebase with thousandsd of porn links hidden in triple-quoted strings. Google reveals that 1-argument setdefault() is a favorite of Asian porn spammers. So you should add a second argument just to avoid getting in trouble with Interpol ;-)