def say_boo_twice():
global boo
boo = \'Boo!\'
print boo, boo
boo = \'boo boo\'
say_boo_twice()
The output is
Boo! Bo
Before giving an example I want you to understand difference between global and local variable in python
global variable: This is specific to current module
local variable: This is specific to current functions or methods as we call it in python
What if both local and current variable have the same name boo ?
In such case if you don't define your variable boo as global in the same method or function it will by default use it as local variable
Coming to your code
You have defined boo as global in your method say_boo_twice(). The catch is when you try to initialize boo = 'Boo!' in that method you are actually overwriting what you initialized previously as boo = 'boo boo'
Try this code
-- I have not initialized variable boo inside method say_boo_twice()
def say_boo_twice():
global boo
print boo, boo
boo = 'boo boo'
say_boo_twice()
All the Best !!! !! !
global boo is global only inside method say_boo_twice and has been re-assigned a value inside of this method. You need to understand the lexical or scope where it can be global or what you want it to be. In this context, just before printing, it was assigned a value of 'Boo!' and that is what it correctly printed.
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
You are re-assigning boo after you declare it as global, so the value is the last one you assigned to it. If you removed line three, you would get the output you expect.
Essentially you reassign boo when you call the function.
Check how this works with the globals() and locals() functions.