On Wed, Feb 13, 2013 at 9:17 AM, Hugo Arts <hugo.yo...@gmail.com> wrote: > To be more precise, the comma at the end is part of a tuple (you can omit > parentheses of a tuple in many cases). This makes the final for loop iterate > over the tuple (range(y, 10), x + y == z). You'll notice that this only > works if the variable 'z' is already defined, since the tuple isn't > constructed in the for loop.
In 3.x the parser requires the parentheses in a list comprehension, but not in a for loop. And the list comprehension is compiled as a function, so you get an UnboundLocalError when trying to evaluate x+y==z. Just for fun, here's an example that makes a function from the code of a list comprehension in 3.x. The function takes the first iterator in the comprehension as an argument: >>> f = lambda: [(x,y) for x in 'ab' for y in 'cd'] >>> lcomp = type(f)(f.__code__.co_consts[1], globals()) >>> lcomp(iter('12')) [('1', 'c'), ('1', 'd'), ('2', 'c'), ('2', 'd')] Never do this. The code assumes the argument is an iterator, so it's easy to trigger a segfault: >>> lcomp('12') Segmentation fault _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor