[Python-Dev] accumulator display syntax
Michael Hudson
mwh at python.net
Tue Oct 21 07:59:50 EDT 2003
Guido van Rossum <guido at python.org> writes:
>> On Monday 20 October 2003 04:30 pm, Guido van Rossum wrote:
>> > > We are indeed sure (sadly) that list comprehensions leak control variable
>> > > names.
>> >
>> > But they shouldn't. It can be fixed by renaming them (e.g. numeric
>> > names with a leading dot).
>>
>> Hmmm, sorry?
>>
>> >>> [.2 for .2 in range(3)]
>> SyntaxError: can't assign to literal
>>
>> I think I don't understand what you mean.
>
> I meant that the compiler should rename it.
Implementing this might be entertaining. In particular what happens
if the iteration variable is a local in the frame anyway? I presume
that would inhibit the renaming, but then there's a potentially
confusing dichotomy as to whether renaming gets done. Of course
you could *always* rename, but then code like
def f(x):
r = [x+1 for x in range(x)]
return r, x
becomes even more incomprehensible (and changes in behaviour).
And what about horrors like
[([x for x in range(10)],x) for x in range(10)]
vs:
[([x for x in range(10)],y) for y in range(10)]
?
I suppose you could make a case for throwing out (or warning about)
all these cases at compile time, but that would require significant
effort as well (I think).
Cheers,
mwh
--
This song is for anyone ... fuck it. Shut up and listen.
-- Eminem, "The Way I Am"
More information about the Python-Dev
mailing list