Varibales Locales y Globales

El scope de una variable indica hasta dónde se extiende su vida. Si definimos una variable dentro de una función, fuera de ella deja de existir. Decimos que es una variable local:
def prueba():
    x = 3
    print "Dentro, x vale", x
 
prueba()
print "Fuera, x vale", x
Si ejecutamos el script anterior obtendremos algo similar a lo siguiente:
Dentro x vale 3
Fuera x vale
 
Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    print "Fuera x vale", x
NameError: name 'x' is not defined
 
En efecto, x no está definido fuera de la función. Nace y muere con ella.
El comportamiento es un poco más complejo con variables definidas fuera de la funciones u otros objetos (las llamadas variables globales). Podemos acceder a su valor simplemente usando su nombre como es lógico. Si escribimos esto
x=2
def prueba():
    print 'x vale', x
 
prueba()
obtendremos de resultado
x vale 2
Pero si intentamos modificar el valor de la variable, Python piensa que es una variable local y nos dará error. Compruébalo:
x=2
def prueba():
    x = x + 2
    print 'x vale', x
 
prueba()
El código anterior, al ejecutarlo, nos va a dar error:
Traceback (most recent call last):
  File "prueba.py", line 7, in <module>
    prueba()
  File "prueba.py", line 4, in prueba
    x = x + 2
UnboundLocalError: local variable 'x' referenced before assignment
Para solucionarlo, para poder modificar una variable global desde el interior de una función, basta con indicarle a Python que dicha variable es global. El código corregido es el siguiente:
x=2
def prueba():
    global x
    x = x + 2
    print 'x vale', x
 
prueba()
La salida, esta vez sin error, será
x vale 4