def say_boo_twice():
  global boo
  boo = 'Boo!'
  print boo, boo
boo = 'boo boo'
say_boo_twice()
The output is
Boo! Boo!
Not as I expected. Since I declared boo as global, why is the output not:
boo boo boo boo
You've changed boo inside your function, why wouldn't it change? Also, global variables are bad.
Because you reassign right before hand.  Comment out boo = 'Boo!' and you will get what you describe.
def say_boo_twice():
   global boo
   #boo = 'Boo!'
   print boo, boo  
boo = 'boo boo' 
say_boo_twice() 
Also that global boo is unnecessary, boo is already in global scope.
This is where the global makes a difference
def say_boo_twice():   
   global boo
   boo = 'Boo!'
   print boo, boo  
say_boo_twice() 
print "outside the function: " + boo #works
Whereas:
def say_boo_twice():   
   #global boo
   boo = 'Boo!'
   print boo, boo  
say_boo_twice() 
print "outside the function: " + boo # ERROR.  boo is only known inside function, not to this scope
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With