Robert Brewer wrote:
Steven Bethard wrote:

Ville Vainio wrote:

A simpler API:

def flatten(sequence, atomic_test = lambda o:

isinstance(o,basestring)):

""" don't recurse into iterables if atomic_test -> True """

Yes, this is also the API I would have suggested. Simple, but flexible enough to handle the odd cases with the occasional user-defined iterable non-containers.

If there are two or three common atomic_test's they could also be placed into itertools globals (with better names, of course ;):

def is_string(item):
    return isinstance(item, basestring)

def flatten(seq, atomic_test = is_string):
    ...

Perhaps atomic_test could allow a tuple or list of tests and combine
them...?

Did you have other atomic tests in mind? All the use cases I've ever seen have always been with strings. (And I've never created any class whose items are instances of the class.)


I don't see much benefit in complicating the API of flatten unless there's a really good use case for multiple atomic tests (that can't just as easily be solved by writing your own function that does the appropriate complex atomicity test). I also have the feeling that any complicated atomictiy test is more than a simple and-ing of several tests...

STeVe
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to