On Sat, 16 Jul 2005 16:42:58 -0400, Peter Hansen wrote: > Steven D'Aprano wrote: >> On Sat, 16 Jul 2005 10:25:29 -0400, Peter Hansen wrote: >>>Bengt Richter wrote: >>> >>>> >>> identity = ''.join([chr(i) for i in xrange(256)]) >>> >>>And note that with Python 2.4, in each case the above square brackets >>>are unnecessary (though harmless), because of the arrival of "generator >>>expressions" in the language. >> >> But to use generator expressions, wouldn't you need an extra pair of round >> brackets? >> >> eg identity = ''.join( ( chr(i) for i in xrange(256) ) ) > > Come on, Steven. Don't tell us you didn't have access to a Python > interpreter to check before you posted:
Er, as I wrote in my post: "Steven who is still using Python 2.3, and probably will be for quite some time" So, no, I didn't have access to a Python interpreter running version 2.4. I take it then that generator expressions work quite differently than list comprehensions? The equivalent "implied delimiters" for a list comprehension would be something like this: >>> L = [1, 2, 3] >>> L[ i for i in range(2) ] File "<stdin>", line 1 L[ i for i in range(2) ] ^ SyntaxError: invalid syntax which is a very different result from: >>> L[ [i for i in range(2)] ] Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: list indices must be integers In other words, a list comprehension must have the [ ] delimiters to be recognised as a list comprehension, EVEN IF the square brackets are there from some other element. But a generator expression doesn't care where the round brackets come from, so long as they are there: they can be part of the function call. I hope that makes sense to you. -- Steven -- http://mail.python.org/mailman/listinfo/python-list