No sé si hay un atributo de una función que da el __dict__del espacio exterior de la función cuando este espacio exterior no es el espacio global == el módulo, que es el caso cuando la función es una función anidada, en Python 3.
Pero en Python 2, hasta donde yo sé, no existe tal atributo.
Entonces, las únicas posibilidades para hacer lo que quieras son:
1) usar un objeto mutable, como dicen otros
2)
def A() :
b = 1
print 'b before B() ==', b
def B() :
b = 10
print 'b ==', b
return b
b = B()
print 'b after B() ==', b
A()
resultado
b before B() == 1
b == 10
b after B() == 10
.
No un
La solución de Cédric Julien tiene un inconveniente:
def A() :
global b # N1
b = 1
print ' b in function B before executing C() :', b
def B() :
global b # N2
print ' b in function B before assigning b = 2 :', b
b = 2
print ' b in function B after assigning b = 2 :', b
B()
print ' b in function A , after execution of B()', b
b = 450
print 'global b , before execution of A() :', b
A()
print 'global b , after execution of A() :', b
resultado
global b , before execution of A() : 450
b in function B before executing B() : 1
b in function B before assigning b = 2 : 1
b in function B after assigning b = 2 : 2
b in function A , after execution of B() 2
global b , after execution of A() : 2
La b global después de la ejecución deA() se ha modificado y puede que no se desee
Ese es el caso solo si hay un objeto con el identificador b en el espacio de nombres global