Thanks for the suggestion.  I've thought about it and I think I still prefer 
the lambda form here.  My reasoning inasmuch as I can articulate it:

 1) The cited reason to prefer other forms over lambda is that naming functions 
makes them easier to debug.  While that's fair in general, I have difficulty 
seeing it coming into play here: the return value is slightly interesting, but 
not particularly the execution of the function, and the former is very 
straightforwardly visible from the caller anyway.

 2) I tend to feel that a useful barometer for this kind of thing is to 
consider adding additional levels.  Before I noticed that the suite was 
redundant, I had a three-level defaultdict instead, so it was "overrides = 
defaultdict(lambda: defaultdict(lambda: defaultdict(set)))".  Now, one might 
argue about whether this is readable enough (I think that simplifying the 
dictionary population code is worth it, but it's certainly up for debate).

    The alternative would be "overrides = 
defaultdict(defaultdict(defaultdict(set).copy).copy)".  Admittedly that's a bit 
more symmetrical, but I find it harder to follow; constructs where you just 
close all the parentheses at the end are easier to parse visually because you 
can see at a glance that you don't need to keep as careful track of how many 
levels deep you are.  Also, I had to test this to reassure myself that it 
actually did the right thing rather than copying a partially-populated 
defaultdict, whereas the correctness of the lambda form is clear once you have 
the structure.

 3) (weak) There's precedent for the lambda form:

   lib/lp/bugs/model/structuralsubscription.py:793:    statuses = 
defaultdict(lambda: defaultdict(list))
-- 
https://code.launchpad.net/~cjwatson/launchpad/unnecessary-publisher-work/+merge/120356
Your team Launchpad code reviewers is subscribed to branch lp:launchpad.

_______________________________________________
Mailing list: https://launchpad.net/~launchpad-reviewers
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~launchpad-reviewers
More help   : https://help.launchpad.net/ListHelp

Reply via email to