On Sun, 24 Apr 2005 22:59:12 -0700, Robert Kern wrote:
Never. If you really need a list
list(x*x for x in xrange(10))
Sadly, we can't remove list comprehensions until 3.0.
Why "remove" them? Instead, we have these things called "comprehensions" (which, now that I say that, seems a rather odd name), and you can control whether they result in a list or a generator with () or [].
They are *not* the same thing. They have completely different implementations although they have very similar syntax and the former subsumes just about *every* use of the latter. That's pointless except for maintaining backwards compatibility. The difference in implementation is one reason why generator expressions were not called generator comprehensions.
What's more, the list comprehension implementation is warty. It leaks variables.
I don't see why they need to be "removed". Lists are already a special case of the "only one way to do it" principle ([] vs. list()), and pragmatically I don't see any reason to remove them here; it doesn't add comprehensibility,
Yes it does. The OP was confused as to which to use now that both exist. This has come up here before.
leaving them in doesn't significantly affect the mental size of the code (the *comprehension* is the hard part, the final form should be relatively simple), it's not worth breaking that code.
Like I said, this would only happen at 3.0 when all of your code will break anyways.
-- Robert Kern [EMAIL PROTECTED]
"In the fields of hell where the grass grows high Are the graves of dreams allowed to die." -- Richard Harter
-- http://mail.python.org/mailman/listinfo/python-list