
>>> [(a,b) for (a,b) in zip(range(5), range(10))] [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)] >>> [a,b for (a,b) in zip(range(5), range(10))] File "<stdin>", line 1 [a,b for (a,b) in zip(range(5), range(10))] ^ SyntaxError: invalid syntax
This one has bitten me several times.
When it does, I discover the error quickly due to the syntax error,
Generally, when we talk about something "biting", we mean something that *doesn't* give a syntax error, but silently does something quite different than what you'd naively expect. This was made a syntax error specifically because of this ambiguity.
but it would be bad if this became valid syntax and returned a list [a,X] where X is an iterator. I don't think you could count on this getting caught by a being unbound, because often the variables in list comprehensions can be single letters that shadow previous bindings.
No, [a,X] would be a syntax error if X was an iterator comprehension. --Guido van Rossum (home page: http://www.python.org/~guido/)