'''Local variables are those that are defined in a block '''
a = 1 #This is NOT a local variable, this is a global variable
def add():
b = 1 #This IS a local variable
print(b)
add()
#If we tried to print(b) outside of the add() function, we would get an error
A with statement does not create a scope (like if, for and while do not create a scope either).
As a result, Python will analyze the code and see that you made an assignment in the with statement, and thus that will make the variable local (to the real scope).
def foo():
y = "local"
foo()
print(y)
def foo():
y = "local"
print(y)
foo()