Est-il possible de modifier les variables en python qui est à l'extérieur, mais pas global, de la portée?

Donné le code suivant:

def A() :
    b = 1

    def B() :
        # I can access 'b' from here.
        print( b )
        # But can i modify 'b' here? 'global' and assignment will not work.

    B()
A()

Pour le code de B() variable de fonction b est à l'extérieur de la portée, mais pas dans la portée globale. Est-il possible de modifier b variable de l'intérieur B() fonction? Certes, je peux le lire à partir d'ici et print(), mais comment le modifier?

  • Python 3 ou 2 ?
  • Désolé, bien sûr 2.7 :). Pour python 3 règles de portée a changé.
  • Vous pouvez aussi longtemps que b est mutable. Une cession à b masque l'extérieur de la portée.
  • C'est l'un de Python embarras que nonlocal n'a pas été portée à 2.x. C'est une partie intrinsèque de soutien de fermeture.
InformationsquelleAutor grigoryvp | 2011-12-09