Name localization
Now that we are familiar with all types of comprehensions and generator expressions, let's talk about name localization within them. Python 3 localizes loop variables in all four forms of comprehensions: list, dictionary, set, and generator expressions. This behavior is therefore different from that of the for loop. Let's look at some simple examples to show all the cases:
# scopes.py A = 100 ex1 = [A for A in range(5)] print(A) # prints: 100 ex2 = list(A for A in range(5)) print(A) # prints: 100 ex3 = {A: 2 * A for A in range(5)} print(A) # prints: 100 ex4 = {A for A in range(5)} print(A) # prints: 100 s = 0 for A in range(5): s += A print(A) # prints: 4 In the preceding code, we declare a global name, A = 100, and then exercise list, dictionary, and set comprehensions and a generator expression. None of them alter the global name, A. Conversely, you can see at the end that the for loop modifies it. The last print statement prints...