x=5
def printx()
print x
x=10
running this gives unboundlocal error
but when my function is just print x i get no error..
x=5
def printx()
print x
x=10
running this gives unboundlocal error
but when my function is just print x i get no error..
Simply assigning a value to x
in the function is making it a local variable, therefore shadowing the global x = 5
specified on the previous line. And on the line you're trying to print x
, the local version of x
hasn't been initialized yet. It is curious how doing something on a later line is influencing lines that come before it, but that's just how it works.
You don't need any special declaration to read a global variable, therefore it works without the assignment inside the function. However, if you'd rather assign 10
to the global x
instead of making a new, local x
, you'll have to specify global x
inside the function.