However the purpose my suggestion of __multiter__ was not to use it to test for multiple iteration, but to enable a container to be able to yield either a single or a multiple iterator on request.
David> Why would you want that? Seems like a corner case at best. You're right -- I wasn't thinking clearly. What I meant to say was that I would like a program that expects to be able to use a multiple iterator to be able to say so simply and efficiently in code. For example: for i in multiter(x): // whatever I would like this to fail cleanly if x does not support multiple iterators.
A data structure that supports several different kinds of iteration has to provide that support somehow. What's your suggestion?
David> class DataStructure(object): David> def __init__(self): David> self._numbers = range(10); David> self._names = [ str(x) for x in range(10) ]; David> names = property(lambda self: iter(self._names)) David> numbers = property(lambda self: iter(self._numbers)) David> x = DataStructure(); David> for y in x.names: David> print repr(y), David> print David> for y in x.numbers: David> print repr(y), David> [Y'know, Python is great. That worked the first time I ran it.] I don't understand how this code answers my question. You've asked for iterators over two different data structures. What I was asking was, for example, how one might arrange for a single tree to yield either a depth-first or breadth-first iterator.