Incorrect scope of list comprehension variables

Chris Rebert clp2 at rebertia.com
Sat Apr 17 02:34:53 CEST 2010


On Fri, Apr 16, 2010 at 5:20 PM, Steven D'Aprano
<steve at remove-this-cybersource.com.au> wrote:
> On Fri, 16 Apr 2010 08:48:03 -0700, Aahz wrote:
>> In article <4bb92850$0$8827$c3e8da3 at news.astraweb.com>, Steven D'Aprano
>> <steve at REMOVE-THIS-cybersource.com.au> wrote:
>>>Nevertheless, it is a common intuition that the list comp variable
>>>should *not* be exposed outside of the list comp, and that the for-loop
>>>variable should. Perhaps it makes no sense, but it is very common --
>>>I've never heard of anyone being surprised that the for-loop variable is
>>>exposed, but I've seen many people surprised by the fact that list-comps
>>>do expose their loop variable.
>>
>> I've definitely seen people surprised by the for-loop behavior.
>
> What programming languages were they used to (if any)?
>
> I don't know of any language that creates a new scope for loop variables,
> but perhaps that's just my ignorance...

Well, technically it's the idiomatic placement of the loop variable
declaration rather than the loop construct itself, but:

//Written in Java
//Can trivially be changed to C99 or C++
for (int i = 0; i < array.length; i++)
{
    // code
}
// variable 'i' no longer accessible

//Using a for-each loop specific to Java
for (ItemType item : array)
{
    // code
}
// variable 'item' no longer accessible

Cheers,
Chris
--
http://blog.rebertia.com



More information about the Python-list mailing list