On Tue, Mar 06, 2018 at 10:17:20PM +0000, Albert-Jan Roskam wrote: > > >>> all(c.isdigit() for c in '12c4') > > False > > I never understood why this is syntactically correct. It's like two > parentheses are missing. > > This I understand: > all((c.isdigit() for c in '12c4')) > Or this: > all([c.isdigit() for c in '12c4']) > Or this: > all((True, False)) > > But the way you wrote it, the generator expression just "floats" in > between the parentheses that are part of the all() function. Is this > something special about all() and any()?
No, it is something special about generator expressions. The syntax for them is theoretically: expression for x in iterable but parentheses are required to make it unambiguous. If they are already inside parentheses, as in a function call: spam(expression for x in iterable) the function call parens are sufficient to make it unambiguous and so there is no need to add an extra pair. However, if you have two arguments, or some other compound expression, you need to use disambiguation parens: spam(999, (expression for x in iterable)) -- Steve _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor