Je ne sais pas s'il y a un attribut d'une fonction qui donne le __dict__
de l'espace extra-atmosphérique de la fonction quand 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, il n'y a pas un tel attribut.
Donc, les seules possibilités pour faire ce que vous voulez sont:
1) utiliser un objet mutable, comme l'ont dit d'autres
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 b global après exécution deA()
a été modifié et il peut ne pas être souhaité ainsi
C'est le cas uniquement s'il y a un objet avec l'identifiant b dans l'espace de noms global