> > If you're asking why list's don't have a clear() method, the answer is > > that they already had two ways to do it (slice assignment and slice > > deletion) and Guido must have valued API compactness over collection > > polymorphism. The latter is also evidenced by set.add() vs > > list.append() and by the two pop() methods having a different > > signatures. [bonono] > Sounds to me that it is a preference(style, whatever), rather than some > other posts of this thread argued that "del L[:]" is better.
It was simply design decision reflecting Guido's values on language economics. > > If you're asking why your specific case looked so painful, I suspect > > that it only looked hard because the adaptation was force-fit into a > > lambda (the del-statement or slice assignment won't work as an > > expression). You would have had similar difficulties embedding > > try/except logic or a print-statement. Guido, would of course > > recommend using a plain def-statement: > > > > L = list() > > def L_clearer(L=L): > > del L[:] > > for listbunch in buncher(src, '', L, L.append, L_clearer): > > print listbunch > > > Is that really "clearer" ? While it is still very localized(just read a > few lines up for the definition), buncher(src, '', L.append, L.clear) > seems to be clearer to me, especially there are two similar construct > on set/dict above, Hmm, my post was so long that the main points were lost: * the example was tricky only because of the unnecessary in-place update requirement * eliminating that requirement solves the adaptation problem and simplifies the client code * the constructor API is polymorphic, use it * adding clear() doesn't help with the other API variations between set, list, dict, etc. * Guido's decision for distinct APIs is intentional (i.e. set.add vs list.append) * Alex's adapter PEP is likely a better solution for forcing polymorphism on unlike APIs * When a lambda becomes awkward, Guido recommends a separate def * Guido has no sympathy for atrocities resulting from squeezing everything into one line * Alex's example can be simplified considerably: def buncher(sourceit, sentinel, constructor): for k, g in groupby(sourceit, lambda x: x != sentinel): if k: yield constructor(g) for setbunch in buncher(src, '', set): print setbunch * The improved version has no need for list.clear(). End of story. Raymond -- http://mail.python.org/mailman/listinfo/python-list