On Mon, Apr 17, 2006 at 05:40:19PM -0500, Ian Bicking wrote: > Raymond Hettinger wrote: > > -1 on making strings non-iterable. The cure is worse than the disease. <snip> > > I'm also -1 on almost all proposals of this kind. IMHO, the first cut > > of Py3000 should be directed at subtracting the cruft and consolidating > > what we have. It should be a better Python, not just a different > > Python. The surest route to that goal is to build on what has been > > shown to work and experiment with random alternatives that may or may > > not ultimately prove their worth. > > I don't see how this is so dramatically different. I proposed it > specifically to remove something that at least I considered a language > wart: an area prone to errors that provides an interface inconsistent > with other parts of the language.
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". General algo problem for nested sequences. I'd rather see a builtin that makes that case easier then to go and remove iteration on strings- something akin to def iter_flatten(lists, dont_iterate=[str]): stack=[iter(lists)] while stack: for x in stack[-1]: if hasattr(x, "__iter__") and isinstance(x, dont_iterate): stack.append(iter(x)) break yield x else: stack.pop(-1) That (assuming I didn't typo it) addresses the issue in a general way, without removing (useful) __iter__ from instances that occasionally we don't want to fully expand. An easier way to invoke a func of the sort from above gets the best of both worlds- still have iteration over strings, and general solution to common problem. Downside is that it forces an extra func call for the following if it's unknown if the instance is a string or a normal sequence- for x in iter_flatten(unknown_type_instance): do_something_with_it(x) ~harring
pgpJJPhYmTugR.pgp
Description: PGP signature
_______________________________________________ Python-3000 mailing list Python-3000@python.org http://mail.python.org/mailman/listinfo/python-3000 Unsubscribe: http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com