[Python-3000] Change to class construction?
Nick Coghlan
ncoghlan at gmail.com
Sun Jul 8 07:10:16 CEST 2007
Terry Reedy wrote:
> "Nick Coghlan" <ncoghlan at gmail.com> wrote in message
> news:468FA01A.6040707 at gmail.com...
> | In py3k it expands to:
> |
> | def <anon>(outermost):
> | %0 = []
> | for x in outermost:
> | for y in seq2:
> | %0.append(x*y) # Special opcode, not a normal call
> | return %0
> | %n = <anon>(seq1)
>
> Why not pass both seq1 *and* seq2 to the function so both become locals?
> The difference of treatment is quite surprising.
The inner iterable expressions can't be evaluated early, as they need to
be re-evaluated for each pass around the outer loop (or loops). An
example where the iterable expression for the inner loop refers to the
iteration variable of the outer loop should make that clear:
.>>> [y for x in range(4) for y in range(x)]
[0, 0, 1, 0, 1, 2]
The advantage of the Py3k approach is that it eliminates the current
semantic differences between a list comprehension and list() with a
generator expression argument, while keeping most of the performance
benefits of the special syntax.
Cheers,
Nick.
--
Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia
---------------------------------------------------------------
http://www.boredomandlaziness.org
More information about the Python-3000
mailing list