On 15 July 2013 11:40, Oscar Benjamin <oscar.j.benjamin@gmail.com> wrote:
On 13 July 2013 01:25, Joshua Landau <joshua.landau.ws@gmail.com> wrote:
A blessing from the Gods has resulted in http://www.python.org/dev/peps/pep-0448/! See what you think; it's not too changed from before but it's mighty pretty now.
I definitely like the general colour of this shed but would probably repaint one side of it: while unpacking can create tuples, sets, lists and dicts there's no way to create an iterator. I would like it if the unpacking syntax could somehow be used for iterators. For example:
first_line = next(inputfile) # inspect first_line for line in chain([first_line], inputfile): # process line
could be rewritten as
first_line = next(inputfile): for line in first_line, *inputfile: pass
without reading the whole file into memory.
Using the tuple syntax is probably confusing but it would be great if there were some way to spell this and get an iterator instead of a concrete collection.
It's useful... I don't dislike it. It might even be a good fit to use tuple syntax for this: 1) We already use the tuple's comprehension syntax for iterators 2) If you think of "*" as yield from, it's not too different from changing a function to a generator But you have the "unification" disadvantage, as well as the added complexity of implementation. Side note: In fact, I'd much like it if there was an iterable "unpacking" method for functions, too, so "chain.from_iterable()" could use the same interface as "chain" (and str.format with str.format_map, etc.). I feel we already have a good deal of redundancy due to this.
Also this may be outside the scope of this PEP but since unpacking is likely to be overhauled I'd like to put forward a previous suggestion by Greg Ewing that there be a way to unpack some items from an iterator without consuming the whole thing e.g.:
a, ... = iterable
That's definitely outside of this PEP's scope ;). Also, I think you oversimplified your last version -- you still need a try-except AFAICT.