[Python-ideas] PEP for issue2292, "Missing *-unpacking generalizations"
Jan Kaliszewski
zuo at chopin.edu.pl
Mon Jul 15 23:34:10 CEST 2013
15.07.2013 12:40, Oscar Benjamin wrote:
> 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.
Please note, that with PEP 448 syntax you could express it by:
first_line = next(inputfile)
for line in (*it for it in ([first_line], inputfile)):
...
Event now, in Python 3.3, you can[*] write:
first_line = next(inputfile)
for line in [(yield from it) for it in [[first_line], inputfile]]:
...
Cheers,
*j
[*] Please note that it is `yield from` within a *list comprehension*,
not a generator expression... And that this list cimprehension still
evaluates to a *generator*, not a list! (a [None, None] list is set
as StopIteration's value when the generator is exhausted)
An interesting fact (but understandable after a though) is that:
while a generator created with:
[(yield from it) for it in [[1,2,3], 'abc']]
produces items:
1, 2, 3, 'a', 'b', 'c',
a generator created with:
((yield from it) for it in [[1,2,3], 'abc'])
produces items:
1, 2, 3, None, 'a', 'b', 'c', None
I am not sure if ability to use it that way is only an implementation
artifact, but it works.
More information about the Python-ideas
mailing list