Je ne sais pas s'il existe un attribut d'une fonction qui donne la __dict__
de l'espace extérieur de la fonction lorsque cet espace extérieur n'est pas l'espace global == le module, ce qui est le cas lorsque la fonction est une fonction imbriquée, en Python 3.
Mais dans Python 2, pour autant que je sache, un tel attribut n'existe pas.
Donc les seules possibilités de faire ce que vous voulez sont :
1) utiliser un objet mutable, comme l'ont dit d'autres personnes
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()
résultat
b before B() == 1
b == 10
b after B() == 10
.
Nota
La solution de Cédric Julien présente un inconvénient :
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
résultat
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
Le marché mondial b après l'exécution de A()
a été modifié et il se peut qu'il ne soit pas souhaité ainsi
C'est le cas seulement s'il y a un objet avec l'identifiant b dans l'espace de nom global