Why isn't the 'global' keyword needed to access a global variable?
global-variables, python
Solution
The keyword `global` is only useful to change or create global variables in a local context, although creating global variables is seldom considered a good solution.
def bob():
me = "locally defined" # Defined only in local context
print(me)
bob()
print(me) # Asking for a global variable
The above will give you:
locally defined
Traceback (most recent call last):
File "file.py", line 9, in <module>
print(me)
NameError: name 'me' is not defined
While if you use the `global` statement, the variable will become available "outside" the scope of the function, effectively becoming a global variable.
def bob():
global me
me = "locally defined" # Defined locally but declared as global
print(me)
bob()
print(me) # Asking for a global variable
So the above code will give you:
locally defined
locally defined
In addition, due to the nature of python, you could also use `global` to declare functions, classes or other objects in a local context. Although I would advise against it since it causes nightmares if something goes wrong or needs debugging.
Problem
From my understanding, Python has a separate namespace for functions, so if I want to use a global variable in a function, I should probably use `global`. However, I was able to access a global variable even without `global`: ``` >>> sub = ['0', '0', '0', '0'] >>> def getJoin(): ... return '.'.join(sub) ... >>> getJoin() '0.0.0.0' ``` Why does this work? See also UnboundLocalError on local variable when reassigned after first use for the error that occurs when attempting to assign to the global variable without `global`. See Using global variables in a function for the general question of how to use globals.