Name localization
Now that we are familiar with all types of comprehensions and generator expressions, let us 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 different from that of the for
loop. Let us 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.
We then have list, dictionary, and set comprehensions, and a generator expression. Even though they all use the name A
, none of them alter the global name, A
. On the other hand, the for
loop at the end does modify the global A
. The last print
statement...