On Wed, Aug 07, 2013 at 08:54:26PM -0700, Jim Mooney wrote: > This bugs me for some reason. The final variable is saved in a for > loop but not in a list comprehension. It just seems to me they should > both be destroyed to avoid confusion.
The variable in a for-loop is deemed to be in the same scope as the rest of the function, the same as any other local variable. This is often very useful: for item in objects: if condition(item): break print(item) If for-loops introduced their own scope, as they do in a few other languages, you would need to do something like this: found = None for item in objects: if condition(item): found = item break print(found) On the other hand, list comprehensions (since Python 3) and generator expressions (always) are deemed to exist in their own scope. That makes conceptual sense, since a generator expression is its own chunk of executable code, like a function, and in fact are implemented much the same way that functions are implemented internally. List comps look the same, and since Python 3 are now treated the same. That way you can use a list comp or generator expression without worrying that its loop variable will clobber an existing local variable of the same name. [...] > Is there a form of for loop that would destroy the loop variable? I > could always do del cnt right after the for, but that seems > artificial. Why do you care? The typical function is chock full of local variables that are used a few times, then hang around doing nothing until the function exits. This doesn't cause any problems in practice. -- Steven _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor