>>34
"Python has no type declaration"
This is because the *value* gets bound.
"so you can't tell at a glance whether a = 2 is declaring and initializing a variable or changing an already existent one.
"
Normally declaring and initializing a variable happens in languages that bind the *type* to the object. However, python bind the *value*.
"This will obviously lead to problems if you ever accidentally reuse the name of a global variable - forcing you to explicitly state you are using the global variable prevents this problem from occurring"
It depends. The variable, and not the value itself, is what bound to the namespace in python.
For more details, please refer to the python docs.