On 10/07/2008, Kent Johnson <[EMAIL PROTECTED]> wrote: > On Wed, Jul 9, 2008 at 9:38 PM, John Fouhy <[EMAIL PROTECTED]> wrote: > > Is the generator expression grammar right? How do I parse, e.g., > > '(x+1 for x in range(10))'? Seems like there's nothing there for > > 'range(10)'. Like it should replace 'or_test' with 'old_expression'. > I can't figure out how to parse that either, as a gen exp or a list comp.
Oh, wait, I got it. I just didn't follow the chain far enough. old_expression -> or_test -> and_test -> not_test -> comparison -> or_expr -> xor_expr -> and_expr -> shift_expr -> a_expr -> m_expr -> u_expr -> power -> primary -> call (or replace call with atom) So the other difference between list comprehensions and generator expressions is that list comprehensions get to use "old_expression"s whereas generator expressions start with "or_test"s. An old_expression can be an old_lambda_form, which means that this is valid syntax: >>> [x for x in lambda y: y**2] whereas this is not: >>> (x for x in lambda y: y**2) I'm lost for how to come up with a use for that, though (or even a way to write code like that without producing a TypeError: 'function' object is not iterable). -- John. _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor