[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 ;-) _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com