Paul Rubin wrote:
You snipped out the examples I gave, like [x*x for x in range(5)]
leaving unnecessary residue in the name space.  Was it not obvious
from the beginning that that was a kludge?  If it was obviously
a kludge, was it not obvious that there would be reason to want to
fix it someday?  I'm saying that if some new feature is going to
need a fix later, it's better to fix it before releasing it in
the first place.

The scoping problem isn't the the least bit obvious, since the equivalent for loop also happens at local scope:


Py> lst = []
Py> for x in range(5):
...   lst.append(x*x)
...
Py> print x
4
Py> lst2 = [y*y for y in range(5)]
Py> print y
4

However experience has shown that while having the iteration variable visible after a for loop is useful (due to the existence of the break and raise statements), with a list comprehension the identical behaviour is nothing more than namespace pollution (since you can't use list comprehensions for alternate control flow based searches).

So Python 2.4's generator expressions are quite happily evaluated in a separate frame, and the fact that the iteration variable is hidden from the containing scope is viewed as a feature.

But knowing a priori that copying the for loop semantics exactly would turn out to be a misfeature? I'll go with Steve's assessment of psychic powers ;)

Cheers,
Nick.

--
Nick Coghlan   |   [EMAIL PROTECTED]   |   Brisbane, Australia
---------------------------------------------------------------
            http://boredomandlaziness.skystorm.net
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to