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...