BUG? list-comprehension's inconsistency? was: Re: list-display semantics?
Bengt Richter
bokr at accessone.com
Mon Jun 11 01:19:27 CEST 2001
On Sun, 10 Jun 2001 23:00:30 +0400 (MSD), Roman Suzi <rnd at onego.ru>
wrote:
>On Mon, 11 Jun 2001, jainweiwu wrote:
>
>BTW, I think it could be list-comprehension's
>inconsistency (if not a bug!), look:
>
>1->>> [x for x in [1, 2, 3], y for y in [4, 5, 6]] # first try
>Traceback (most recent call last):
> File "<stdin>", line 1, in ?
>NameError: name 'y' is not defined
>2->>> [x for x in [1, 2, 3], [y for y in [4, 5, 6]]]
>[[1, 2, 3], [4, 5, 6]]
>3->>> [[x for x in [1, 2, 3]], [y for y in [4, 5, 6]]]
>[[1, 2, 3], [4, 5, 6]]
>4->>> [x for x in [1, 2, 3], y for y in [4, 5, 6]] # 2nd try
>[[1, 2, 3], [1, 2, 3], [1, 2, 3], 6, 6, 6]
>
>-- and this lead to subtle errors.
It is subtle, but not a bug per se, if you ask me.
But it is like a combination of operator precedence and
name scope traps for the unwary, which I was ;-)
>
>There are even two things which seem wrong here:
>
>A) 1 and 4-s steps differ only because y is now defined.
>B) results of step 2 and 3 do not differ, while visually
>I've added [] around first item.
I think it's the implicit tuplification again, but so long
as that's legal we can't complain that 2+3 and 4+1 have the
same result, even though the expressions look different ;-)
>2->>> [x for x in [1, 2, 3], [y for y in [4, 5, 6]]]
Tuplifying:
>>> [x for x in ( [1, 2, 3], [y for y in [4, 5, 6]] )]
[[1, 2, 3], [4, 5, 6]]
or:
>>> xtuple = ( [1, 2, 3], [y for y in [4, 5, 6]] )
>>> xtuple
([1, 2, 3], [4, 5, 6])
>>> [x for x in xtuple ]
[[1, 2, 3], [4, 5, 6]]
>3->>> [[x for x in [1, 2, 3]], [y for y in [4, 5, 6]]]
ISTM this one has to be legal, since it's just a list of
expressions which individually happen to be (unambiguous)
list comprehensions.
I.e.,
>>> xcomp = [x for x in [1, 2, 3]]
>>> ycomp = [y for y in [4, 5, 6]]
>>> [[x for x in [1, 2, 3]], [y for y in [4, 5, 6]]]
[[1, 2, 3], [4, 5, 6]]
>>> [ xcomp, ycomp ]
[[1, 2, 3], [4, 5, 6]]
I hope I am not misleading anyone. I am still new to Python.
More information about the Python-list
mailing list