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

boltsfrombluesky
  • 412
  • 3
  • 13

1 Answers1

1

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.

Matti Virkkunen
  • 63,558
  • 9
  • 127
  • 159