Now that we are familiar with all types of comprehensions and generator expression, let's talk about name localization within them. Python 3.* localizes loop variables in all four forms of comprehensions: list, dict, set, and generator expressions. This behavior is therefore different from that of the for loop. Let's see a simple example 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 = dict((A, 2 * A) for A in range(5))
print(A) # prints: 100
ex4 = set(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 we exercise the four comprehensions: list, generator expression, dictionary, and set. None of them alter the global name, A. Conversely, you...