[Python-3000] iter_flatten was: Making strings non-iterable (original) (raw)

Raymond Hettinger RHettinger at ewtllc.com
Tue Apr 18 01:47:18 CEST 2006


[Brian Harring]

The issue I'm seeing is that the wart you're pointing at is a general issue not limited to strings- everyone sooner or later has flattening code that hits the "recursively iterate over this container, except for instances of these classes".

Good recap. For more info, search comp.lang.python for previous discussions about a proposed iter_flatten() function. One of the conclusions was that a general algorithm would need to accept a user specified test for atomicity so it would know where to recurse and a where not to (the answer to that is application dependent).

Another conclusion was that an iterator version of flattening was a just one of many possible algorithms for traversing a hierarchical structure (i.e. a pre-order tree traversal). But some use cases needed more control points than provided by overly specific solutions (os.walk() and depth-first puzzle solvers are prime examples).

The discussion itself was an interesting case-study because the flattening algorithm variants out-numbered the use cases (IOW, it's more fun to write flatten() than to use it). It was also interesting because the problem produced a tail-wagging-the-dog effect as discussions went from "how can I write a more general flatten" and turned into "how can I can modify the language to make my flatten variant apply more generally".

Raymond



More information about the Python-3000 mailing list